私は請求システム (この場合はドメインのプロビジョニングも管理する) 用の 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 つの必須フィールドがあります。
- キータグ
- アルゴリズム (プラグイン入力の keyAlg と等しいと考えられています)
- ダイジェスト タイプ (プラグイン入力で digestAlg と呼ばれていると思います)
- ダイジェスト (おそらくダイジェストと同じ)
その他のオプションのフィールドは次のとおりです: フラグ、プロトコル、アルゴリズム、公開鍵 (プラグインでは「鍵」です...)
今、これは私が迷子になっているところです.PHPで上記のC関数を実装するにはどうすればよいですか?
key
文字配列である「DNSKEY RDATA」を作成するにはどうすればよいですか? (Flags オクテットはデフォルト値で、0、256、257 のように、まだわからないと推測しています)、次に、プロトコル オクテットは、この例では keyAlg 値 5 であり、その後に常に 3 であるアルゴリズム オクテットが続き、最後に - キー オクテットがキーです。 . その推測は正しいですか??)- char key[] 配列 RDATA はバイナリ配列ですか? またはアスキー文字?(つまり、一度構築したら、最初にバイナリ ビットに変換する必要はありませんか?)
& 0xFFFF
アルゴリズムの目的は何ですか? 同等のphpは何ですか?PHP は構文が C ベースであるため、ほとんど同じであると考えがちですが、正しい入力/出力の例がなければ、正しく理解していることを確認するのは難しいでしょう...