CARVIEW |
This specification describes the RSA Signature Suite created in 2018 for the Linked Data Signatures specification.
This is an experimental specification and is undergoing regular revisions. It is not fit for production deployment.
Introduction
This specification describes the RSA Signature Suite created in 2018 for the Linked Data Signatures [[LD-SIGNATURES]] specification. It uses the RDF Dataset CANONICALIZATION Algorithm [[RDF-DATASET-CANONICALIZATION]] to transform the input document into its canonical form. It uses SHA-256 [[RFC6234]] as the message digest algorithm and the RS256 algorithm defined in JSON Web Signatures [[RFC7515]] as the signature algorithm.
Terminology
The following terms are used to describe concepts involved in the generation and verification of the Linked Data Signature 2018 signature suite.
- signature suite
- A specified set of cryptographic primitives typically consisting of a canonicalization algorithm, a message digest algorithm, and a signature algorithm that are bundled together by cryptographers for developers for the purposes of safety and convenience.
- canonicalization algorithm
- An algorithm that takes an input document that has more than one possible representation and always transforms it into a canonical form. This process is sometimes also called CANONICALIZATION.
- message digest algorithm
- An algorithm that takes an input message and produces a cryptographic output message that is often many orders of magnitude smaller than the input message. These algorithms are often 1) very fast, 2) non-reversible, 3) cause the output to change significantly when even one bit of the input message changes, and 4) make it infeasible to find two different inputs for the same output.
- signature algorithm
- An algorithm that takes an input message and produces an output value where the receiver of the message can mathematically verify that the message has not been modified in transit and came from someone possessing a particular secret.
The 2018 RSA Signature Suite
The 2018 RSA signature suite MUST be used in conjunction with the signing and verification algorithms in the Linked Data Signatures [[LD-SIGNATURES]] specification. The suite consists of the following algorithms:
Parameter | Value | Specification |
---|---|---|
canonicalizationAlgorithm | https://w3id.org/security#GCA2015 | [[RDF-DATASET-CANONICALIZATION]] |
digestAlgorithm | https://www.ietf.org/assignments/jwa-parameters#SHA256 | [[RFC6234]] |
signatureAlgorithm | https://www.ietf.org/assignments/jwa-parameters#RS256 | [[RFC7515]] |
Modification to Algorithms
This signature suite uses a constrained profile of JSON Web Signatures which is specified in [[RFC7797]]. The signature algorithm used is the JSON Web Signature implementation of the RSASSA-PKCS1-v1_5 algorithm. The steps to construct and verify the digital signature are defined below.
The digital signature algorithm defined in Section 7.1:
Signature Algorithm takes tbs, a privateKey,
and options as inputs and produces a
signatureValue as output.
The digital signature algorithm defined in Section 7.2:
Signature Verification Algorithm takes the value to be verified,
tbv, the public key to the signature algorithm
and returns a boolean value.
Modifications to Signature Algorithm
{"alg":"RS256","b64":false,"crit":["b64"]}
and the
payload is a URL-safe Base64 encoding of tbs.
Modifications to Signature Verification Algorithm
true
, otherwise return false
.
Security Considerations
The following section describes security considerations that developers implementing this specification should be aware of in order to create secure software.
Examples
A simple example of an RSA 2018 signature:
{ "@context": ["https://schema.org/", "https://w3id.org/security/v1"], "description": "Hello world!", "proof": { "type": "RsaSignature2018", "created": "2017-10-24T05:33:31Z", "creator": "https://example.com/jdoe/keys/1", "domain": "example.com", "signatureValue": "eyiOiJJ0eXAK...EjXkgFWFO" } }