web-dev-qa-db-ja.com

LibTomCryptの奇妙なECCキー

LibTomCrypt Libraryは、Elliptic Curve Cryptographyを使い始めるのに十分に文書化されたCライブラリであると主張していたため、最近、私がLibTomCrypt Libraryの使用を開始しました。

最初の小さなプログラムで、後で印刷しようとしたECCキーを作成しました。したがって、ecc_make_keyとecc_export関数を使用しました。

unsigned char buf[4][4096]

// I do this for the private and public Key
ecc_export(keyBufPriv[0]  /*keyBufPublic[0]*/, &x, PK_PRIVATE /* PK_PUBLIC */, &keyA)
for (int i = 0; i < x; i++) {
    printf(" %d ", keyBuf[0][i]);
}

それらを印刷して、なぜ公開鍵と秘密鍵が非常に似ているように見えるのだろうと思いました。同じ動作を示すいくつかのテストプログラムがライブラリに付属しています。上記と同様のprintf行をテストプログラムに追加しました。

私のプログラムからの出力:

output from my short program

testprogramからの出力:

output from the test program

秘密鍵と公開鍵は類似しているため、libtomcrypライブラリのすべてが安全なECC-Cryptoを作成するために必要に応じて実行されるかどうかを自問しています。

3
SebNag

https://github.com/libtom/libtomcrypt/blob/develop/src/pk/ecc/ecc_export.c からわかるように、印刷しているASN.1/DERエンコードされたデータです。 'k'パラメータ以外に同じデータが含まれています。

つまり、秘密鍵と公開鍵が似ているのは普通のことです。

これをデコードするには、ASN.1データを解析して表示できるdumpasn1をインストールします。

Ecc APIの使用方法に関する詳細が必要な場合は、 https://github.com/DCIT/Perl-CryptX/blob/master/lib/CryptX_PK_ECC.xs.inc を参照してください。 =

カレルのすべての変更が(まだ)メインのlibtomcryptにマージされているわけではないので、それはあまり明白ではなく、まったく同じAPIでもありませんが、それはあなたにアイデアを与えるはずです。

4
jaeckel