• ベストアンサー

署名と検証

http://java.sun.com/j2se/1.4/ja/docs/ja/guide/security/CryptoSpec.html を読んで、ある文章への署名の方法はわかりました。 だた、検証の方法がわからないんです。 例えば、あるプログラムで署名されたファイルを 違うプログラムで検証するにはどうしたらいいのでしょうか? 秘密鍵の生成などはわかったのですが、 どのようにして、署名をした人でない人が 公開鍵を受け取って検証するのでしょうか? この公開鍵の受け取り方がわかりません。 どうかよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kacchann
  • ベストアンサー率58% (347/594)
回答No.1

■署名側アプリケーション ------------------------ KeyPair pair; (1)キーペア・ジェネレータ作成 (2)キーペアジェネレータ初期化 (3)キーペア(公開鍵と秘密鍵のペア)生成 (http://java.sun.com/j2se/1.4/ja/docs/ja/guide/security/CryptoSpec.html#KPGEx) (3)Signatureオブジェクト作成 (4)(秘密鍵で)Signatureオブジェクト初期化 (5)Signatureオブジェクトに「署名対象データ」(※署名対象のファイルデータなど)を認識させる。(下記dsaはSignatureオブジェクト) FileInputStream fis = new FileInputStream("target.txt"); BufferedInputStream bis = new BufferedInputStream(fis); byte[] data = new byte[1024]; int len; while (bis.available() != 0) { len = bis.read(data); dsa.update(data, 0, len);//Signatureオブジェクトに認識! }; bis.close(); (6)「署名対象データ」の署名を得る。 byte[] sig = dsa.sign(); (http://java.sun.com/j2se/1.4/ja/docs/ja/guide/security/CryptoSpec.html#SigEx) (7)ファイルに「署名(バイト配列)」を書き出す。 (8)ファイルに「公開鍵(バイト配列)」を書き出す。(※下記pubはPublicKeyオブジェクト) byte[] key = pub.getEncoded();//バイト配列にエンコード ・ ・ (以下省略) ・ ------------------------ あとは、 「署名対象データ(ファイル)」「署名データを書き出したファイル」「公開鍵データを書き出したファイル」を検証側に送って、 それらをつかって検証してもらう。(※検証の流れは上記URLにも書いてある) ※この検証の際、「公開鍵のバイト配列」からPublicKeyオブジェクトをどうやって得るかがポイントかも。その方法は http://java.sun.com/j2se/1.4/ja/docs/ja/guide/security/CryptoSpec.html#KeyFactoryEx ここの「Alice は、次のコードを実行して署名を検証できます。 このコードは、符号化された状態から DSA 公開鍵のインスタンスを生成…」という箇所。

その他の回答 (2)

  • Harry_
  • ベストアンサー率55% (36/65)
回答No.3

テストしたいだけなら、好きなように受け取ればよい と思いますが。 実用的な受け取り方としては、公開鍵サーバの利用が あります。「公開鍵サーバ」で検索すれば情報が沢山 ヒットします。

  • kacchann
  • ベストアンサー率58% (347/594)
回答No.2

No.1です。 ごめん。思いっきり「いらんこと」書いてしまった…。 3分の2は、必要なかったね…。 書き直し。 -------------------- ・署名のバイト配列を書き込んだファイル ・公開鍵のバイト配列を書き込んだファイル ・署名対象のファイル の3つを、何らかの方法で(※郵送とか?) 相手に送る。(一緒に送らないで別々に送ったほうがいいのかな? このへんはよくわからない) 相手は、送られてきたファイルを元に検証する。

関連するQ&A