秘密鍵で暗号化し、公開鍵で復号化するには?

解決


ハヤテ  2016-05-16 08:13:29  No: 73907  IP: [192.*.*.*]

度々と申し訳ありません。
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+201605/16050001.txtで解決済としましたが勘違いでした。
下記コードの様な署名/検証では別PCでの検証時にもsrcDataが必要なので、srcDataを秘匿(暗号化)して別PCに渡すという目的では使用できないと推測しています。
それともsrcDataを別PCに渡さなくても検証時にsignDataと公開鍵からsrcDataを導き出す方法が用意されているのでしょうか?

    BYTE srcData[120];//別PCに秘匿して送信したいデータ
    BYTE signData[512];
    ULONG signSize=512,srcSize=120;
    BCRYPT_KEY_HANDLE hKey;
    
    /***   前処理  ***//
    // BCRYPT_ECDSA_P384_ALGORITHMでアルゴリズムハンドルを取得

    /***   送信PCでの署名処理  ***//
    // BCRYPT_ECCPRIVATE_BLOBで hKey に秘密鍵をインポート
    BCryptSignHash(hKey,NULL,srcData,srcSize,signData,512,&signSize,0);//ハッシュではなくsrcData自体を署名(秘密鍵で暗号化)

    /***   受信PCでの検証処理  ***//
    // BCRYPT_ECCPUBLIC_BLOBで hKey に公開鍵をインポート
    NTSTATUS status=BCryptVerifySignature(hKey,NULL,srcData,srcSize,signData,signSize,0);
    if(status==0) //検証成功


公開鍵で暗号化して秘密鍵で復号化する方法では別PCに秘密鍵情報をエクスポートする必要があり、その情報から対の公開鍵を導出できる様なので別PCからsrcDataを改変されてしまいます。
エクスポートされた公開鍵情報から秘密鍵を導出する事はできない様なので、CryptAPIやCNGやKSPを用いて100バイト前後のsrcDataを公開鍵暗号の秘密鍵で暗号化し、対の公開鍵がある別PCで復号化したいです。
srcDataを共通鍵暗号で暗号化し、共通鍵を公開鍵暗号の秘密鍵で暗号化して別PCに渡す方法も検討しましたが上記と同じ理由で秘匿して渡す事ができません。
ご教示よろしくお願い致します。

編集 削除
YuO  2016-05-16 11:18:59  No: 73908  IP: [192.*.*.*]

署名は検証鍵のペアとなる署名鍵を持つ当人が署名したことを保証するためのものです。
前回の訂正になりますが,検証データは署名時に比較用データとして出力されたものでもかまわないため,
署名を検証関数に入れたときにメッセージダイジェストそのものと比較する必要はありません。
ref) http://www.vicus-oryzae.com/gorua/sign.html
# それなりにこのまわりの記述を読んだつもりだったのですが,私はまだRSAに囚われているらしい。


公開鍵暗号方式での暗号化は,
・公開鍵で暗号化
・秘密鍵で復号
です。それ以外の使い方はできません。
また,電子署名は,
・署名鍵で署名
・検証鍵で検証
です。それ以外の使い方はできません。

なので,受信側で秘密鍵と公開鍵を用意する必要があります。


送信先が複数ある場合,
・共通鍵暗号方式での鍵を決定
・共通鍵を送信先それぞれの公開鍵で暗号化 (a)
・情報を共通鍵で暗号化 (b)
・(a)と(b)を結合して相手に送信 (c)
として,受信側では,
・自身の秘密鍵に対応する公開鍵で暗号化された(a)から,共通鍵を取得する (d)
・(d)を使って(b)を復号する
という手段をとります。

どうも,署名と暗号化の両方が必要なようなので,PGPに沿うなら,
・データに対して署名を作成 (A)
・データ+(A)を共通鍵で暗号化 (B)
・共通鍵を送信先分だけ公開鍵で暗号化 (C)
・(B)+(C)を通信する (D)
・(D)から(C)を取り出し,自身の公開鍵で暗号化された部分から共通鍵を取得する (E)
・(D)から(B)を取り出し,(E)で復号する (F)
・(F)からデータと署名に分離し,署名を検証する
という手順になるかと。

編集 削除
ハヤテ  2016-05-17 09:19:40  No: 73909  IP: [192.*.*.*]

YuO 様
明瞭に助言していただきありがとうございます。
実装途中ですが図で希望動作を実現できる事を確認できました。

編集 削除