Firmware Key and Signature Formats: Difference between revisions
RafaelOrtiz (talk | contribs) m (+translations) |
(Add 1-character disposition field) |
||
Line 42: | Line 42: | ||
==Antitheft/Activation Lease== |
==Antitheft/Activation Lease== |
||
act01: serial-number expiration sig01: sha256 keyid data\n |
act01: serial-number d expiration sig01: sha256 keyid data\n |
||
3 2 2 11 |
3 2 2 11 111 16 1 3 2 2 6 1 64 1 N 1 |
||
An activation lease begins with: |
An activation lease begins with: |
||
Line 51: | Line 51: | ||
* A space |
* A space |
||
* The 11-character ASCII serial number of the machine this lease is for |
* The 11-character ASCII serial number of the machine this lease is for |
||
* A space |
|||
* A one-character disposition |
|||
* A space |
* A space |
||
* The 16-character [http://en.wikipedia.org/wiki/ISO_8601 ISO 8601] UTC expiration time in basic format (no dashes or colons) and no fractional seconds. (eg: "20070816T173500Z") |
* The 16-character [http://en.wikipedia.org/wiki/ISO_8601 ISO 8601] UTC expiration time in basic format (no dashes or colons) and no fractional seconds. (eg: "20070816T173500Z") |
||
** should consist of the string "00000000T000000Z" if not present or not applicable. |
** should consist of the string "00000000T000000Z" if not present or not applicable. |
||
It is then followed by a signature, in the format above and with hashname "sha256", of the string: |
It is then followed by a signature, in the format above and with hashname "sha256", of the string: |
||
<serial-number>:<uuid>:<expiration time> |
<serial-number>:<uuid>:<disposition>:<expiration time> |
||
where the expiration time in the string is identical in format and content to the signature expiration time. |
where the expiration time in the string is identical in format and content to the signature expiration time. |
||
For example: |
For example: |
||
SHF725001A0:414737D8-2312-9241-9C7B-9886CB74403C:20080819T052946Z |
SHF725001A0:414737D8-2312-9241-9C7B-9886CB74403C:K:20080819T052946Z |
||
The disposition is ignored by firmware. Current userland behavior corresponds to disposition 'K'; we might support alternative dispositions in the future. |
|||
==Developer key== |
==Developer key== |
||
dev01: serial-number sig01: sha256 keyid data\n |
dev01: serial-number d sig01: sha256 keyid data\n |
||
3 2 2 11 |
3 2 2 11 111 3 2 2 6 1 64 1 N 1 |
||
An developer key begins with: |
An developer key begins with: |
||
Line 71: | Line 75: | ||
* A space |
* A space |
||
* The 11-character ASCII serial number of the machine this developer key is for |
* The 11-character ASCII serial number of the machine this developer key is for |
||
* A space |
|||
* The 1-character disposition |
|||
* A space |
* A space |
||
It is then followed by a signature, in the format above and with hashname "sha256", of the string: |
It is then followed by a signature, in the format above and with hashname "sha256", of the string: |
||
<serial-number>:<uuid>:00000000T000000Z |
<serial-number>:<uuid>:<disposition>:00000000T000000Z |
||
For example: |
For example: |
||
SHF725001A0:414737D8-2312-9241-9C7B-9886CB74403C:00000000T000000Z |
SHF725001A0:414737D8-2312-9241-9C7B-9886CB74403C:A:00000000T000000Z |
||
Note that the payload is identical to that of an activation lease, although developer keys never expire. The verification key used also differs. |
Note that the payload is identical to that of an activation lease, although developer keys never expire. The verification key used also differs. |
||
At the moment, developer keys always have disposition 'A'. |
|||
==Resources== |
==Resources== |
Revision as of 20:29, 19 September 2007
This page describes the key and signature formats understood by OFW. The Firmware Security page describes how these are used.
Key
key01: data\n 3 2 2 N 1
So that's:
- The literal string "key"
- The two digit version number ("01" for now)
- A colon
- A space
- The key data
- A newline
The key data is a hexadecimal-encoded octet string. The octet string is the ASN.1 DER encoding of an RSA public key given by Appendix A.1.1 of RSA PKCS #1, version 2.1.
Future versions of the key format might allow different algorithms.
Signature
sig01: hashname keyid data\n 3 2 2 6 1 64 1 N 1
So that's:
- The literal string "sig"
- The two digit version number ("01" for now)
- A colon
- A space
- A six character name for the hash function used by this signature
- "sha256" indicates that this is an RSASSA-PSS signature using SHA256 as the hash and MGF1-SHA256 as the mask function.
- "rmd160" indicates that this is an RSASSA-PKCS1-v1_5 signature using RIPEMD-160 as the hash function.
- A space
- The 64 character key ID, which are the trailing 64 characters of the "key data" in the key format above. (for the immediate future you can ignore this in the firmware, and just use a single key for each task.)
- This includes the exponent and the least significant bytes of the modulus
- A space
- The signature data as a hexadecimal-encoded string. The encoded data is the octet string given by section 8.1.1/8.2.1 of RSA PKCS #1, version 2.1.
- A newline
Antitheft/Activation Lease
act01: serial-number d expiration sig01: sha256 keyid data\n 3 2 2 11 111 16 1 3 2 2 6 1 64 1 N 1
An activation lease begins with:
- The literal string 'act'
- The two digit version number ("01" for now)
- A colon
- A space
- The 11-character ASCII serial number of the machine this lease is for
- A space
- A one-character disposition
- A space
- The 16-character ISO 8601 UTC expiration time in basic format (no dashes or colons) and no fractional seconds. (eg: "20070816T173500Z")
- should consist of the string "00000000T000000Z" if not present or not applicable.
It is then followed by a signature, in the format above and with hashname "sha256", of the string:
<serial-number>:<uuid>:<disposition>:<expiration time>
where the expiration time in the string is identical in format and content to the signature expiration time.
For example:
SHF725001A0:414737D8-2312-9241-9C7B-9886CB74403C:K:20080819T052946Z
The disposition is ignored by firmware. Current userland behavior corresponds to disposition 'K'; we might support alternative dispositions in the future.
Developer key
dev01: serial-number d sig01: sha256 keyid data\n 3 2 2 11 111 3 2 2 6 1 64 1 N 1
An developer key begins with:
- The literal string 'dev'
- The two digit version number ("01" for now)
- A colon
- A space
- The 11-character ASCII serial number of the machine this developer key is for
- A space
- The 1-character disposition
- A space
It is then followed by a signature, in the format above and with hashname "sha256", of the string:
<serial-number>:<uuid>:<disposition>:00000000T000000Z
For example:
SHF725001A0:414737D8-2312-9241-9C7B-9886CB74403C:A:00000000T000000Z
Note that the payload is identical to that of an activation lease, although developer keys never expire. The verification key used also differs.
At the moment, developer keys always have disposition 'A'.