公開鍵証明書符号化解読

10814 ワード

一、ファイルコード


PEM(Privacy Enhancement Message)、定義はRFC 1421を参照してbase 64ベースの符号化フォーマットであり、linux/unixで一般的な証明書符号化である.
構造構成={header}body{tail}例
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMYfnvWtC8Id5bPKae5yXSxQTt
+Zpul6AnnZWfI2TtIarvjHBFUtXRo96y7hoL4VWOPKGCsRqMFDkrbeUjRrx8iL91
4/srnyf6sh9c8Zk04xEOpK1ypvBz+Ks4uZObtjnnitf0NBGdjMKxveTq+VE7BWUI
yQjtQ8mbDOsiLLvh7wIDAQAB
-----END PUBLIC KEY-----

DER(Distinguished Encoding Rules)、定義はウィキペディア-SN.1.DERはASNからのものである.1システムのバイナリ符号化フォーマットで、windows/macの証明書符号化によく使われる
符号化方式==DER uses a pattern of type-length-value triplets

二、公開鍵標準


PKCS(Public Key Cryptography Standards)、定義はウィキペディア-PCCSを参照して公開鍵暗号学の標準であり、その定義範囲は証明書署名、暗号化アルゴリズム、充填モード、検証プロセスなどをカバーしている.
一般的なPKCS標準
バージョン#バージョン#
マイルストーン
PKCS#1
RFC 8017は、公開鍵秘密鍵の符号化フォーマット(ASN.1符号化)を定義し、基礎アルゴリズムおよび符号化/充填モード、署名検証、opensslのデフォルト標準フォーマットを含む
PKCS#3
DiffieHellman Key Agreement,DH鍵交換規格を定義
PKCS#5
RFC 8018は、パスワードの暗号化基準に基づいてPBKDF 2アルゴリズムを定義する
PKCS#7
RFC 2315は、鍵情報構文基準、PKIシステムにおける情報署名及び暗号化基準を定義し、S/MIMEの一部である
PKCS#8
RFC 5958は、証明書鍵ペアの共通フォーマット(RSAに限定されない)を記述するための秘密鍵情報構文基準を定義する
PKCS#11
鍵Tokenインタフェースが定義、単点登録/公開鍵アルゴリズム/ディスク暗号化システムによく用いられる.(ハードウェア暗号化)
PKCS#12
RFC 7292、個人情報交換文法標準、秘密鍵と公開鍵証明書の記憶方式(パスワードをサポート)を定義し、よく使われるPFX略称、Java Key Storeの符号化フォーマット

三、RSA鍵


RSA公開鍵符号化


PublicKey-PKCS#1-PEM
-----BEGIN RSA PUBLIC KEY-----
BASE64 ENCODED DATA
-----END RSA PUBLIC KEY-----

PublicKey-PKCS#1-DER
RSAPublicKey ::= SEQUENCE {
    modulus           INTEGER,  -- n
    publicExponent    INTEGER   -- e
}

PublicKey-PKCS#8-PEM
-----BEGIN PUBLIC KEY-----
BASE64 ENCODED DATA
-----END PUBLIC KEY-----

PublicKey-PKCS#8-DER
PublicKeyInfo ::= SEQUENCE {
  algorithm       AlgorithmIdentifier,
  PublicKey       BIT STRING
}

AlgorithmIdentifier ::= SEQUENCE {
  algorithm       OBJECT IDENTIFIER,
  parameters      ANY DEFINED BY algorithm OPTIONAL
}

RSA公開鍵の場合、OIDは(1.2.84.13549.1.1)である.

RSA秘密鍵符号化


PrivateKey-PKCS#1-PEM
-----BEGIN RSA PRIVATE KEY-----
BASE64 ENCODED DATA
-----END RSA PRIVATE KEY-----

PrivateKey-PKCS#1-DER
RSAPrivateKey ::= SEQUENCE {
  version           Version,
  modulus           INTEGER,  -- n
  publicExponent    INTEGER,  -- e
  privateExponent   INTEGER,  -- d
  prime1            INTEGER,  -- p
  prime2            INTEGER,  -- q
  exponent1         INTEGER,  -- d mod (p-1)
  exponent2         INTEGER,  -- d mod (q-1)
  coefficient       INTEGER,  -- (inverse of q) mod p
  otherPrimeInfos   OtherPrimeInfos OPTIONAL
}

PrivateKey-PKCS#8-PEM
-----BEGIN PRIVATE KEY-----
BASE64 ENCODED DATA
-----END PRIVATE KEY-----

PrivateKey-PKCS#8-DER
PrivateKeyInfo ::= SEQUENCE {
  version         Version,
  algorithm       AlgorithmIdentifier,
  PrivateKey      OCTET STRING
}

AlgorithmIdentifier ::= SEQUENCE {
  algorithm       OBJECT IDENTIFIER,
  parameters      ANY DEFINED BY algorithm OPTIONAL
}

秘密鍵ファイルは暗号化方式で保存でき、暗号化後のフォーマット:EncryptedPrivateKey-PCCS#8-PEM
-----BEGIN ENCRYPTED PRIVATE KEY-----
BASE64 ENCODED DATA
-----END ENCRYPTED PRIVATE KEY-----

Encrypted-PrivateKey-PKCS#8-DER
EncryptedPrivateKeyInfo ::= SEQUENCE {
  encryptionAlgorithm  EncryptionAlgorithmIdentifier,
  encryptedData        EncryptedData
}

EncryptionAlgorithmIdentifier ::= AlgorithmIdentifier

EncryptedData ::= OCTET STRING

四、証明書


X.509証明書、ウィキペディア-X.509は、現在流行している公開鍵証明書の標準です.X.509証明書には、公開鍵と対応するエンティティ名(hostname/organization/individual)が含まれています.証明書は通常、証明書認証機関によって署名または自己署名される.証明書所有者が他方に信頼されている場合(公開鍵署名によって検証される)、両者は、公開鍵アルゴリズムに基づいて安全な伝送チャネルを確立することができる.

証明書構造

Certificate
Version Number
Serial Number
Signature Algorithm ID
Issuer Name
Validity period
Not Before
Not After
Subject name
Subject Public Key Info
Public Key Algorithm
Subject Public Key
Issuer Unique Identifier (optional)
Subject Unique Identifier (optional)
Extensions (optional)
...
Certificate Signature Algorithm
Certificate Signature

プライマリフィールド
フィールド
説明
バージョン番号
証明書がどのバージョンのX.509規格(バージョン1、バージョン2、またはバージョン3)を使用しているかを示します.バージョン番号は証明書の特定の情報に影響します.
シリアル番号
証明書を識別する一意の整数、証明書発行者によって割り当てられた本証明書の一意の識別子
署名アルゴリズム識別子
ビザ書に用いるアルゴリズム識別は、対象識別子に関連するパラメータを加えて構成され、本証明書に用いるデジタル署名アルゴリズムを説明するために用いられる.例えば、SHA-1-RSA
発行者名
証明書発行者の識別可能な別名(DN)は、その証明書を発行したエンティティの唯一のCAのX.500名である
有効期間
証明書の開始日時および終了日時
マスター名
証明書所有者の一意の識別子(またはDN-distinguished name)
公開鍵情報
証明書所有者を含む公開鍵、アルゴリズム
発行者固有識別子
識別子-証明書発行者の一意の識別子.バージョン2およびバージョン3でのみ必要であり、オプションです.
マスター固有識別子
識別子-証明書発行者の一意の識別子.バージョン2およびバージョン3でのみ必要であり、オプションです.
発行者のデジタル署名
これは、発行者の秘密鍵を使用して生成された署名であり、この証明書が発行された後に作成されていないことを確認します.
拡張情報
..
拡張フィールド
フィールド
説明
発行者キー識別子
証明書に含まれる鍵の一意の識別子.同じ証明書所有者の複数対の鍵を区別するために使用されます.
鍵の使用
証明書署名、データ暗号化など、証明書の公開鍵が完了できる機能またはサービスを示すビット列.証明書がKeyUsage拡張子を「極めて重要」としてマークし、「keyCertSign」に設定されている場合、SSL通信中に証明書が表示されると拒否されます.証明書拡張子は、関連する秘密鍵がSSLではなく、証明書の署名にのみ使用されるべきであることを示します.
CRL分布点
CRLの分布場所を示す
秘密鍵の使用期間
証明書に公開鍵が関連付けられている秘密鍵の使用期限を指定します.Not BeforeとNot Afterで構成されています.これが存在しない場合、公開秘密鍵の使用期間は同じです.
証明書ポリシー
証明書の発行と使用ポリシーに関するオブジェクト識別子と制限子から構成されます.
ポリシーマッピング
2つのCAドメイン間の1つまたは複数のポリシーオブジェクト識別子の等価関係を示し、CA証明書にのみ存在する
マスター別名
証明書所有者の別名、例えば電子メールアドレス、IPアドレスなどを指摘し、別名はDNにバインドされている.
発行者別名
電子メールアドレス、IPアドレスなどの証明書発行者の別名を示しますが、発行者のDNは証明書の発行者フィールドに表示される必要があります.
マスターディレクトリのプロパティ
証明書所有者の一連のプロパティを指定します.これを使用してアクセス制御情報を渡すことができます

サンプル-ウィキペディア証明書

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            10:e6:fc:62:b7:41:8a:d5:00:5e:45:b6
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=BE, O=GlobalSign nv-sa, CN=GlobalSign Organization Validation CA - SHA256 - G2
        Validity
            Not Before: Nov 21 08:00:00 2016 GMT
            Not After : Nov 22 07:59:59 2017 GMT
        Subject: C=US, ST=California, L=San Francisco, O=Wikimedia Foundation, Inc., CN=*.wikipedia.org
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub: 
                    04:c9:22:69:31:8a:d6:6c:ea:da:c3:7f:2c:ac:a5:
                    af:c0:02:ea:81:cb:65:b9:fd:0c:6d:46:5b:c9:1e:
                    ed:b2:ac:2a:1b:4a:ec:80:7b:e7:1a:51:e0:df:f7:
                    c7:4a:20:7b:91:4b:20:07:21:ce:cf:68:65:8c:c6:
                    9d:3b:ef:d5:c1
                ASN1 OID: prime256v1
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Agreement
            Authority Information Access: 
                CA Issuers - URI:http://secure.globalsign.com/cacert/gsorganizationvalsha2g2r1.crt
                OCSP - URI:http://ocsp2.globalsign.com/gsorganizationvalsha2g2

            X509v3 Certificate Policies: 
                Policy: 1.3.6.1.4.1.4146.1.20
                  CPS: https://www.globalsign.com/repository/
                Policy: 2.23.140.1.2.2

            X509v3 Basic Constraints: 
                CA:FALSE
            X509v3 CRL Distribution Points: 

                Full Name:
                  URI:http://crl.globalsign.com/gs/gsorganizationvalsha2g2.crl

            X509v3 Subject Alternative Name: 
                DNS:*.wikipedia.org, DNS:*.m.mediawiki.org, DNS:*.m.wikibooks.org, DNS:*.m.wikidata.org, DNS:*.m.wikimedia.org, DNS:*.m.wikimediafoundation.org, DNS:*.m.wikinews.org, DNS:*.m.wikipedia.org, DNS:*.m.wikiquote.org, DNS:*.m.wikisource.org, DNS:*.m.wikiversity.org, DNS:*.m.wikivoyage.org, DNS:*.m.wiktionary.org, DNS:*.mediawiki.org, DNS:*.planet.wikimedia.org, DNS:*.wikibooks.org, DNS:*.wikidata.org, DNS:*.wikimedia.org, DNS:*.wikimediafoundation.org, DNS:*.wikinews.org, DNS:*.wikiquote.org, DNS:*.wikisource.org, DNS:*.wikiversity.org, DNS:*.wikivoyage.org, DNS:*.wiktionary.org, DNS:*.wmfusercontent.org, DNS:*.zero.wikipedia.org, DNS:mediawiki.org, DNS:w.wiki, DNS:wikibooks.org, DNS:wikidata.org, DNS:wikimedia.org, DNS:wikimediafoundation.org, DNS:wikinews.org, DNS:wikiquote.org, DNS:wikisource.org, DNS:wikiversity.org, DNS:wikivoyage.org, DNS:wiktionary.org, DNS:wmfusercontent.org, DNS:wikipedia.org
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Subject Key Identifier: 
                28:2A:26:2A:57:8B:3B:CE:B4:D6:AB:54:EF:D7:38:21:2C:49:5C:36
            X509v3 Authority Key Identifier: 
                keyid:96:DE:61:F1:BD:1C:16:29:53:1C:C0:CC:7D:3B:83:00:40:E6:1A:7C

    Signature Algorithm: sha256WithRSAEncryption
         8b:c3:ed:d1:9d:39:6f:af:40:72:bd:1e:18:5e:30:54:23:35:
         66:5e:62:d5:01:e2:63:47:70:cb:6d:1b:17:b0:f5:4d:11:e4:
         ad:94:51:c5:5e:72:03:b0:d5:ab:18:eb:b5:3a:08:a8:73:95:
         f3:7f:41:1a:28:7b:45:7c:83:2e:d3:14:95:d8:d5:d1:5f:99:
         4b:0c:f4:c3:9b:0b:4f:e9:49:f4:2c:b5:ae:c3:1d:7d:2a:80:
         f6:70:29:4c:0c:e6:e0:cb:88:8a:8a:02:ee:a5:d1:73:c2:93:
         58:24:ff:43:1b:e3:fd:7b:aa:f0:15:0c:60:52:8f:21:7d:87:
         3a:14:fa:81:41:00:60:4f:96:9a:62:94:58:de:cb:15:5c:3c:
         f4:c1:4d:33:e3:ff:39:fe:28:fb:b0:41:3e:d2:8a:11:d1:06:
         01:28:74:7d:71:d4:2a:ef:1f:e3:25:4b:2d:f0:66:ef:26:fb:
         4c:f0:81:85:bb:1a:99:06:c9:37:87:de:8d:49:f7:00:91:a9:
         42:31:4a:b9:40:a0:7d:4f:4f:a6:ea:d4:58:07:3c:01:e0:1a:
         53:54:66:e1:a3:7e:30:cd:3b:f8:69:59:a3:48:92:48:e1:9e:
         63:ab:08:70:91:f2:48:d2:83:4b:98:06:fa:fd:bc:99:02:da:
         9c:98:b1:a3

証明書の形式

  • PKI ITU-TX 509規格、従来規格(.der.pem.cer.crt)は、公開鍵
  • のみを含む.
  • PKCS 7暗号化メッセージ構文規格(.p 7 b.p 7 c.spc.p 7 r)、p 7 b/p 7 c/spcは証明書チェーンを含み、p 7 rは証明書要求返信(非証明書)
  • である
  • PKCS#10証明書要求基準(.p 10),.p 10は、証明書要求ファイルである.csrファイルは
  • に似ています
  • PKCS#12個人情報交換規格(.pfx*.p 12)は、公開鍵と秘密鍵を含む、パスワード保護
  • が必要である.

    コーディング形式

  • X.509 DER(Distinguished Encoding Rules)符号化、接尾辞:.der .cer .crt
  • X.509 BASE 64符号化(PEM形式)、接尾辞:.pem .cer .crt

  • X.509CRT-PEM
    -----BEGIN CERTIFICATE-----
    BASE64 ENCODED DATA
    -----END CERTIFICATE-----

    重要な機能

  • 符号化形式:バイナリまたはASCII
  • は、公開鍵、秘密鍵
  • を含むかどうか.
  • は、1つまたは複数の証明書を含む
  • パスワード保護(現在の証明書)
  • がサポートされているかどうか

    リファレンスドキュメント


    mbedドキュメント-公開鍵のderとpem符号化フォーマット比較Chen-PKIシステムとデジタル証明書構造