5

すでに生成されているキーペア(2SecKeyRef秒)から1024ビットのRSA公開キーを抽出して、ネットワーク経由で送信しようとしています。必要なのはプレーン(modulus, exponent)ペアだけです。これは正確に131バイトを占める必要があります(モジュラスは128バイト、指数は3バイト)。

ただし、キー情報をNSDataオブジェクトとしてフェッチすると、131ビットではなく140ビットが取得されます。結果の例を次に示します。

<30818902 818100d7 514f320d eacf48e1 eb64d8f9 4d212f77 10dd3b48 ba38c5a6
 ed6ba693 35bb97f5 a53163eb b403727b 91c34fc8 cba51239 3ab04f97 dab37736
 0377cdc3 417f68eb 9e351239 47c1f98f f4274e05 0d5ce1e9 e2071d1b 69a7cac4
 4e258765 6c249077 dba22ae6 fc55f0cf 834f260a 14ac2e9f 070d17aa 1edd8db1
 0cd7fd4c c2f0d302 03010001>

キーの生成を数回再試行し、結果のNSDataオブジェクトを比較した後、すべてのキーで同じままのバイトは最初の7つです。

<30818902 818100>

最後の3バイトは、指数(65537、一般的な値)のように見えます。「モジュラス」と指数の間にも2バイトあります。

<0203>

暗号の経験が豊富な人は、これがどのエンコーディングであるかを特定するのに役立ちますか?DER?モジュラスと指数を正しくデコードするにはどうすればよいですか?

を使用してモジュラスと指数を手動で削除してみました

NSData* modulus = [keyBits subdataWithRange:(NSRange){ 7, 128 }];
NSData* exponent = [keyBits subdataWithRange:(NSRange){ 7 + 128 + 2, 3 }];

しかし、リモートホストがその「キー」を使用してエンコードしたデータを復号化しようとするとエラーが発生します。

編集:

RSA BLOBを解凍するために使用したソリューションの要点は次のとおりです:https ://gist.github.com/vl4dimir/6079882

4

1 に答える 1

2

ソリューションをiOSで動作させたい場合は、このスレッドをご覧ください。NSData投稿は、エンコーディングがDERであることを確認し、開始したオブジェクトから指数とモジュラスを抽出する方法を示しています。

iOSでは機能しないが、このスレッドにOpenSSLがインストールされているデスクトップシステム(MacOS Xを含む)では機能する別のソリューションがあります。iOSのみのソリューションを探している場合でも、これを使用してコードが正しく機能していることを確認できます。

于 2012-10-17T13:11:52.903 に答える