web-dev-qa-db-ja.com

Diffie Hellmanプライム属性

Diffie-Hellman素数を生成した場合openssl dhparam 512 -text(ペーストサイズを小さくするために意図的に小さいサイズです。最小値は2048以上であることを知っています)、出力のさまざまな部分は次のとおりです。

    PKCS#3 DH Parameters: (512 bit)
        prime:
            00:84:f7:d4:6a:96:54:da:8e:b0:68:4d:8f:42:fe:
            52:a1:4f:dc:05:f7:0b:f1:4a:fd:dd:0a:27:b7:b4:
            c4:09:db:4d:80:c2:b0:46:e0:f6:dc:fe:e2:9a:d2:
            5c:e8:7c:6e:9f:81:aa:bc:4b:8c:6e:67:b5:e5:b2:
            03:b6:56:d3:c3
        generator: 2 (0x2)
-----BEGIN DH PARAMETERS-----
MEYCQQCE99RqllTajrBoTY9C/lKhT9wF9wvxSv3dCie3tMQJ202AwrBG4Pbc/uKa
0lzofG6fgaq8S4xuZ7XlsgO2VtPDAgEC
-----END DH PARAMETERS-----

ジェネレーターは、通常2または5の基本数であることを理解しています。問題は素数とDHパラメーターです。

  1. 表現されている素数は何ですか?
  2. どうすれば実際の素数に変換できますか?
  3. DHパラメータセクションでエンコードされるのは何ですか(なぜですか?)
  4. さまざまなアプリケーション(httpdなど)がこの出力をどのように使用しますか?
2
mart1n
  1. 表現されている素数は何ですか?

実際の数値のプレーン16エンコード。

  1. どうすれば実際の素数に変換できますか?

ベース16から変換するだけです。

$ echo "ibase=16;0084F7D46A9654DA8EB0684D8F42FE52A14FDC05F70BF14AFDD\
D0A27B7B4C409DB4D80C2B046E0F6DCFEE29AD25CE87C6E9F81AABC4B8C6E67B5E5B\
203B656D3C3" | bc
69641036876619088755613794741049804861416084108574896892562277663292\
07662129683124275184714669456043499786144904245391117269209586570225\
834561454877365187

そして、はい、それは実際には素数です。

$ openssl prime -hex 0084F7D46A9654DA8EB0684D8F42FE52A14FDC05F70BF14AFDDD0A27B7B4C409DB4D80C2B046E0F6DCFEE29AD25CE87C6E9F81AABC4B8C6E67B5E5B203B656D3C3   
 84F7D46A9654DA8EB0684D8F42FE52A14FDC05F70BF14AFDDD0A27B7B4C409DB4D80C2B046E0F6DCFEE29AD25CE87C6E9F81AABC4B8C6E67B5E5B203B656D3C3 is prime
  1. DHパラメータセクションでエンコードされるのは何ですか(なぜですか?)

プレーンテキストの説明と同じです。

PEMバージョン:

$ cat dh.pem
-----BEGIN DH PARAMETERS-----
MEYCQQCE99RqllTajrBoTY9C/lKhT9wF9wvxSv3dCie3tMQJ202AwrBG4Pbc/uKa
0lzofG6fgaq8S4xuZ7XlsgO2VtPDAgEC
-----END DH PARAMETERS-----

人間が使用するためにopensslでそのファイルを解析します。

$ cat dh.pem | openssl dhparam -noout -text
DH Parameters: (512 bit)
    prime:
        00:84:f7:d4:6a:96:54:da:8e:b0:68:4d:8f:42:fe:
        52:a1:4f:dc:05:f7:0b:f1:4a:fd:dd:0a:27:b7:b4:
        c4:09:db:4d:80:c2:b0:46:e0:f6:dc:fe:e2:9a:d2:
        5c:e8:7c:6e:9f:81:aa:bc:4b:8c:6e:67:b5:e5:b2:
        03:b6:56:d3:c3
    generator: 2 (0x2)

そして、実際のASN1エンコーディングを解析します。

$ cat dh.pem | openssl asn1parse -i
0:d=0  hl=2 l=  70 cons: SEQUENCE
2:d=1  hl=2 l=  65 prim:  INTEGER           :84F7D46A9654DA8EB0684D8F42FE52A14FDC05F70BF14AFDDD0A27B7B4C409DB4D80C2B046E0F6DCFEE29AD25CE87C6E9F81AABC4B8C6E67B5E5B203B656D3C3
69:d=1  hl=2 l=   1 prim:  INTEGER           :02
  1. さまざまなアプリケーション(httpdなど)がこの出力をどのように使用しますか?

OpenSSLライブラリにリンクし、関連ファイルを渡すだけだと思います。そして、OpenSSLがそれを処理できるようにします。

6
StackzOfZtuff