0

私は請求システム (この場合はドメインのプロビジョニングも管理する) 用の Domain Registrar プラグインを完成させる過程にあり、最後のビットは DNSSEC サポートの実装に関連しています。

請求システムは、次の SAMPLE DNSSEC 関連データを PHP プラグインに送信しています。

'dnsSecInfo' =>
  array (
    0 =>
    array (
      'keyAlg' => 5,
      'digestAlg' => 1,
      'digest' => '1d181b34061ee98088b7a9e6db6e41a130674df0',
      'key' => 'AwEAAaqZeENizOE6uvpDtIfQBB26YebvRdZA/ZjXjKLZdMmMK641sBIvho+yrTveIYclM+8lEVHiq64MY8R2G1IPmKDKXG26rM7NVE0Qx1KL2wRVbRrduRdBmKgJo3XQ3niueviKYXXmeVIO3EhrJsCq272Tm3DaDvng/M7uw1vDnanR2pYNcxI08fZOA6PLGDoUWlDNLGAHHkCvfdWUktVt1DA0GtL/qE/WUgxK6hJyeaXXb0+yq3qCMZh48WgluMFib54D0GN3PI3ZZvBMblAZHmFGqgyVwtPKEimXm/VREe2QtZy3cRgPbfOuiQi8gRhzO+/If8Wi9YnyLovjdsSjRsE=',
    ),
  ),

RFC 4034には次の内容があります。

2.1.  DNSKEY RDATA Wire Format

   The RDATA for a DNSKEY RR consists of a 2 octet Flags Field, a 1
   octet Protocol Field, a 1 octet Algorithm Field, and the Public Key
   Field.

                        1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Flags            |    Protocol   |   Algorithm   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   /                                                               /
   /                            Public Key                         /
   /                                                               /
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

同じプロトコルの付録 B:

The input is the wire
format of the RDATA portion of the DNSKEY RR.
.....
  unsigned int
   keytag (
           unsigned char key[],  /* the RDATA part of the DNSKEY RR */
           unsigned int keysize  /* the RDLENGTH */
          )
   {
           unsigned long ac;     /* assumed to be 32 bits or larger */
           int i;                /* loop index */

           for ( ac = 0, i = 0; i < keysize; ++i )
                   ac += (i & 1) ? key[i] : key[i] << 8;
           ac += (ac >> 16) & 0xFFFF;
           return ac & 0xFFFF;
   }

ドメインが登録されているレジストリには、次の4 つの必須フィールドがあります。

  1. キータグ
  2. アルゴリズム (プラグイン入力の keyAlg と等しいと考えられています)
  3. ダイジェスト タイプ (プラグイン入力で digestAlg と呼ばれていると思います)
  4. ダイジェスト (おそらくダイジェストと同じ)

その他のオプションのフィールドは次のとおりです: フラグ、プロトコル、アルゴリズム、公開鍵 (プラグインでは「鍵」です...)

今、これは私が迷子になっているところです.PHPで上記のC関数を実装するにはどうすればよいですか?

  1. key文字配列である「DNSKEY RDATA」を作成するにはどうすればよいですか? (Flags オクテットはデフォルト値で、0、256、257 のように、まだわからないと推測しています)、次に、プロトコル オクテットは、この例では keyAlg 値 5 であり、その後に常に 3 であるアルゴリズム オクテットが続き、最後に - キー オクテットがキーです。 . その推測は正しいですか??)
  2. char key[] 配列 RDATA はバイナリ配列ですか? またはアスキー文字?(つまり、一度構築したら、最初にバイナリ ビットに変換する必要はありませんか?)
  3. & 0xFFFFアルゴリズムの目的は何ですか? 同等のphpは何ですか?PHP は構文が C ベースであるため、ほとんど同じであると考えがちですが、正しい入力/出力の例がなければ、正しく理解していることを確認するのは難しいでしょう...
4

1 に答える 1