2.PKI-構文[ASN.1]、仕様[PCCS、X.509]、符号化[DER、PEM]

11500 ワード

2.PKI-構文[ASN.1]、仕様[PCCS、X.509]、符号化[DER、PEM]

  • 1. ASN.1 - Abstract Syntax Notation One
  • 2. ASNに基づく.1のデータ記述
  • 2.1 PKCS
  • 2.2 X.509
  • 3. ASN.1相関符号化
  • 4. PEM符号化
  • 4.1 PEM参照
  • 5. 鍵、証明書ファイル接尾辞
  • 参照
  • 前節では,RSAの誕生と鍵ペアの生成について述べたが,生成された鍵はいずれもPEM符号化で示され記憶されているが,これらの鍵ファイルにはいったいどのような内容が含まれているのか,どのような形式で記憶されているのか.本節ではASNについて説明する.1,PKCS,X.509,DER,PEMなどの概念と彼らの関係.次に、鍵ファイルまたは証明書ファイルの接尾辞について簡単に説明します.

    1. ASN.1 - Abstract Syntax Notation One


    In telecommunications and computer networking, Abstract Syntax Notation One (ASN.1) is a standard and flexible notation that describes data structures for representing, encoding, transmitting, and decoding data. It provides a set of formal rules for describing the structure of objects that are independent of machine-specific encoding techniques and is a precise, formal notation that removes ambiguities.
    ASN.1抽象文法タグ(Abstract Syntax Notation One)ASN.1はISO/ITU-T規格であり、データの表示、符号化、伝送、復号を行うデータフォーマットを記述する.言語的にどのように実行され、これらのデータの具体的な世代を指しても、どのようなアプリケーションであるかにかかわらず、オブジェクトを記述するための正規のフォーマットが提供されます.
    ポイント:ASN.1は言語であり、タグ言語であり、データ構造を記述する役割を果たす.このようなデータ構造に基づいて、データの表現、符号化、伝送、復号を行うことができる.

    2.ASNに基づく.1のデータ記述


    PKCSプロトコルグループとX.509プロトコルはいずれもASNを採用している.1で、鍵または証明書のデータ構造を定義します.

    2.1 PKCS


    The Public-Key Cryptography Standards(PKCS)は、証明書申請、証明書更新、証明書廃棄表の発行、証明書内容の拡張、デジタル署名、デジタル封筒のフォーマットなど、米国RSAデータセキュリティ会社とそのパートナーによって制定された公開鍵暗号化基準のセットである.
    1999年末現在、PKCSはPCKS#1~15の15規格を公表している.その中で比較的よく使われるのがPKCS#1,PKCS#7,PKCS#8およびPKCS#12である.
    PKCS #1 : RSA Cryptography Standard
  • Defines the mathematical properties and format of RSA public and private keys, and the basic algorithms and encoding/padding schemes for performing RSA encryption, decryption, and producing and verifying signatures.

  • PKCS #7 : Cryptographic Message Syntax Standard
  • A PKCS #7 file only contains certificates and chain certificates (Intermediate CAs), not the private key.
  • The file name extension is usually .p7b, .p7c.
  • The most common platforms that support P7B files are Microsoft Windows and Java Tomcat

  • PKCS #8 : Private-Key Information Syntax Standard
  • Used to carry private certificate keypairs (encrypted or unencrypted).

  • PKCS #12 : Personal Information Exchange Syntax Standard
  • The PKCS#12 or PFX/P12 format is a binary format for storing the server certificate, intermediate certificates, and the private key in one encryptable file.
  • These files usually have extensions such as .pfx and .p12.
  • They are typically used on Windows machines to import and export certificates and private keys

  • 以下に、いくつかの構文の説明を示します.
    PKCS#1: RSA Public Key Syntax
    RSAPublicKey ::= SEQUENCE {
      modulus           INTEGER,  -- n
      publicExponent    INTEGER   -- e 
    }
    

    PKCS#1: RSA Private Key Syntax
    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
    }
    

    PKCS#8: Private Key Syntax
    PrivateKeyInfo ::= SEQUENCE {
      version         Version,
      algorithm       AlgorithmIdentifier,
      PrivateKey      BIT STRING
    }
     
    AlgorithmIdentifier ::= SEQUENCE {
      algorithm       OBJECT IDENTIFIER,
      parameters      ANY DEFINED BY algorithm OPTIONAL
    }
    

    PKCS#8: Encrypted Private Key Syntax
    EncryptedPrivateKeyInfo ::= SEQUENCE {
      encryptionAlgorithm  EncryptionAlgorithmIdentifier,
      encryptedData        EncryptedData
    }
     
    EncryptionAlgorithmIdentifier ::= AlgorithmIdentifier
     
    EncryptedData ::= OCTET STRING
    

    2.2 X.509


    X.509は暗号学における公開鍵証明書のフォーマット基準である.X.509証明書はTLS/SSL(WWW万維網安全閲覧の礎)を含む多くのインターネットプロトコルに応用されている.電子署名サービスなど、多くの非オンラインアプリケーションシーンでも使用されています.X.509証明書には、公開鍵、アイデンティティ情報(例えば、ネットワークホスト名、組織名または個人名など)と署名情報(証明書発行機関CAの署名であってもよいし、自己署名であってもよい)が含まれている.信頼できる証明書発行機関を介して署名したり、他の方法で検証したりできる証明書については、証明書の所有者は、証明書と対応する秘密鍵で安全な通信を作成し、ドキュメントにデジタル署名することができます.
    また、証明書自体の機能に加えて、X.509には、証明書の取り消しリストと、最終的に証明書に署名する証明書発行機関から最終的な信頼性ポイントまでの証明書正当性検証アルゴリズムが付属しています.
    X.509はITU-T標準化部門が彼らの前のASNに基づいている.1定義された一連の証明書基準.
    ポイント:
  • X.509証明書には、公開鍵情報に加えて、ネットワークホスト名、組織名または個人名などのアイデンティティ情報と署名情報(証明書発行機関CAの署名であってもよいし、自己署名であってもよい)が含まれている.
  • X.509証明書のフォーマットもASNによる.1構文定義.

  • The X.509 v3 certificate basic syntax is as follows.
    Certificate  ::=  SEQUENCE  {
        tbsCertificate       TBSCertificate,
        signatureAlgorithm   AlgorithmIdentifier,
        signatureValue       BIT STRING  }
    
    TBSCertificate  ::=  SEQUENCE  {
        version         [0]  EXPLICIT Version DEFAULT v1,
        serialNumber         CertificateSerialNumber,
        signature            AlgorithmIdentifier,
        issuer               Name,
        validity             Validity,
        subject              Name,
        subjectPublicKeyInfo SubjectPublicKeyInfo,
        issuerUniqueID  [1]  IMPLICIT UniqueIdentifier OPTIONAL,
                             -- If present, version MUST be v2 or v3
        subjectUniqueID [2]  IMPLICIT UniqueIdentifier OPTIONAL,
                             -- If present, version MUST be v2 or v3
        extensions      [3]  EXPLICIT Extensions OPTIONAL
                             -- If present, version MUST be v3
        }
    
    Version  ::=  INTEGER  {  v1(0), v2(1), v3(2)  }
    
    CertificateSerialNumber  ::=  INTEGER
    
    Validity ::= SEQUENCE {
        notBefore      Time,
        notAfter       Time }
    
    Time ::= CHOICE {
        utcTime        UTCTime,
        generalTime    GeneralizedTime }
    
    UniqueIdentifier  ::=  BIT STRING
    
    SubjectPublicKeyInfo  ::=  SEQUENCE  {
        algorithm            AlgorithmIdentifier,
        subjectPublicKey     BIT STRING  }
    
    Extensions  ::=  SEQUENCE SIZE (1..MAX) OF Extension
    
    Extension  ::=  SEQUENCE  {
        extnID      OBJECT IDENTIFIER,
        critical    BOOLEAN DEFAULT FALSE,
        extnValue   OCTET STRING
                    -- contains the DER encoding of an ASN.1 value
                    -- corresponding to the extension type identified
                    -- by extnID
        }
    

    3. ASN.1相関符号化


    ASNと.1関連する符号化規則は
  • 基本符号化規則(BER,Basic Encoding Rules)-X.209
  • 仕様符号化規則(CER,Canonical Encoding Rules)
  • 識別名符号化規則(DER,Distinguished Encoding Rules)
  • 圧縮符号化規則(PER,Packed Encoding Rules)
  • XML符号化規則(XER,XML Encoding Rules)
  • ここで、BER、CER、DER、PERはいずれもバイナリ符号化に属し、関連鍵ファイルと証明書ファイルは一般的にDER符号化を採用している.

    4.PEMコード


    Privacy-Enhanced Mail (PEM) is a de facto file format for storing and sending cryptographic keys, certificates, and other data, based on a set of 1993 IETF standards defining “privacy-enhanced mail.”
    PEMは、暗号学key、証明書、および他のデータを格納および送信するためのファイルフォーマットの事実基準である.ASNを多く使用する.1の暗号学的基準(例えばX.509とPKCS)はいずれもDER符号化を用いているが、DER符号化の内容はバイナリであり、メールとの転送には適していない(初期のEmailでは添付ファイルを送信できない)ため、PEMを用いてバイナリコンテンツをASCII符号に変換する.ファイルの内容のフォーマットは次のとおりです.
    -----BEGIN label-----
    BASE64 Encoded
    -----END label-----
    

    PEMは、実際にはDER符号化されたファイルのバイナリコンテンツをbase 64で符号化し、その上に----BEGIN label-----というヘッダと----END label-----という末尾を付けて、真ん中がDERファイルのBase 64符号化である.

    4.1 PEMリファレンス


    PKCS #1 RSA Private Key
    -----BEGIN RSA PRIVATE KEY-----
    BASE64 Encoded
    -----END RSA PRIVATE KEY-----
    

    PKCS #1 RSA Public Key
    -----BEGIN RSA PUBLIC KEY-----
    BASE64 Encoded
    -----END RSA PUBLIC KEY-----
    

    PKCS #8 Private Key
    -----BEGIN PRIVATE KEY-----
    BASE64 Encoded
    -----END PRIVATE KEY-----
    

    PKCS #8 Encrypted Private Key
    -----BEGIN ENCRYPTED PRIVATE KEY-----
    BASE64 Encoded
    -----END ENCRYPTED PRIVATE KEY-----
    

    X.509 Certificate
    -----BEGIN CERTIFICATE-----
    BASE64 Encoded
    -----END CERTIFICATE-----
    

    X.509 Certificate Subject Public Key Info
    -----BEGIN PUBLIC KEY-----
    BASE64 Encoded
    -----END PUBLIC KEY-----
    

    5.鍵、証明書ファイル接尾辞


    鍵や証明書ファイルの接尾辞は乱雑に見え、どのような接尾辞が適切か分からないものもあります.鍵、証明書ファイルの接尾辞の命名は実は一定の規則があって、それは大体以下のいくつかの種類に分けることができます:
  • は異なる規範によって分けられ、例えばPKCS 7ファイルの接尾辞は.p7b, .p 7 c PKCS#8ファイルの接尾辞は.key PKCS#12ファイルの接尾辞は.p 12,pfx X.509ファイルの接尾辞は.cer, .crt
  • は符号化方式で分ける、例えばDER符号化方式のファイルはその接尾辞が.der,PKCS#12仕様のファイルはバイナリ符号化である、採用可能である.der接尾辞PEM符号化方式のファイルは、その接尾辞が.pemは、PKCS#1、PKCS#7、PKCS#8、X.509仕様を満たすファイルのように一般的に採用されるpem符号化方式
  • である.
    したがって、同一のファイルについては複数の接尾辞を用いる命名することができる、例えば、1つの証明書ファイルについては、PEM符号化を用いる場合に用いることができる接尾辞がある.cer,.crt,.pem.

    リファレンス


    X.509、PKCSファイルフォーマット紹介X.509 PKCS PKCS#1:RSA Cryptography Specifications Version 2.2 Textual Encodings of PKIX、PKCS、and CMS Structures Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List(CRL)Profile