• ベストアンサー

署名と検証

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

  • Java
  • 回答数3
  • ありがとう数1

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

  • ベストアンサー
  • 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

  • 署名検証について

    JAVAではないプログラムで取得した署名と証明書を使用して、JAVAプログラムで署名検証を行おうと思っています。 いろいろとWebで調べ、Certificateクラスを使用して公開鍵を取得しSigunature.verifyで署名を検証しようとしていますがうまくいきません。 ほかにJAVAで元データ/署名/証明書だけで署名検証できる方法はありますでしょうか?

  • デジタル署名

    デジタル署名とは公開鍵暗号方式を応用したものということですよね。 公開鍵暗号方式では暗号化に公開鍵、複合化に秘密鍵を用いるのに、 デジタル署名では暗号化に秘密鍵、複合化に公開鍵となるのは どうしてなのでしょうか。

  • ディジタル署名

    シスアドの勉強中です。 共通鍵方式、公開かぎ方式はわかりました。 ん??となってしまったのはディジタル署名です。 公開かぎ方式の逆だ!、といわれたのですが・・・ とすると、送信者の秘密鍵で暗号化して、受信者は、送信者の公開鍵で複合する・・・・ということになりますよね・・・? 署名鍵って????どこに出てくるんですか??? 送信者の秘密鍵で暗号化されたものが、送信者の公開鍵で複合できたんだから、送信者の特定が出来ました・・・ ということで認証できた・・・ってことですか??? じゃあ・・・・署名鍵ってなに???? すっきり説明できる方お願いします_(._.)_

  • 署名付アプレットの開発方法

    いつもお世話になっております。 署名付アプレットの開発を行った方にお聞きしたいのですが、開発用の証明書はどこから入手しているのでしょうか? 環境:JRE1.3+Swing 機能:クライアントのファイルを操作したい Sunのページ http://java.sun.com/products/plugin/1.3/docs/ja/rsa_signing.html を読みながら試そうとしたのですが、証明書が無いので 結局は試せなかったのです。 PS SSL用の証明書と署名付アプレットで試用する証明書は違うものなのでしょうか???

  • メールのデジタル署名は、なぜ本文を暗号化しないの?

    デジタル署名の仕組みについて教えてください。 デジタル署名の仕組みは、メールの内容(原文)からメッセージダイジェストを作成し、それを送信者の秘密鍵で暗号化したものを署名として原文(または暗号文)に付けるということですが、どうして単に原文そのものを暗号化したものを署名として送らないのでしょうか? 改ざん防止の為であれば、原文そのものを暗号化して送れば、受信側で改めてメッセージダイジェストを作成し、それと復号化したメッセージダイジェストを突き合わせて検証するようなことをしなくても済むと思うのですが。 いづれにしても公開鍵で復号化できるということは、秘密鍵を持っている送信者が署名した段階から改ざんされていないはずですし、その公開鍵が証明書等により検証できていれば、確かに本人であるということになりますよね。 現実世界の「署名」のように、署名とは原文とは別につけるもの(=わざわざ復号化しなくても原文が読める)、いうことに似せているだけのことでしょうか? (参考URL) http://www.ipa.go.jp/security/awareness/administrator/remote/capter6/7.html

  • 電子署名 RSAとDSA

    電子署名の一般的な説明のポンチ絵では以下のように説明されますが、これはRSAを用いた場合であり、DSAではないという理解で正しいでしょうか? ---- 送信者が文書のハッシュ値を秘密かぎで暗号化して電子署名を作成し、文書と電子署名と公開かぎ証明書を相手に送付する。 受信者は公開かぎ証明書を検証後、電子署名を復号化したものと、文書のハッシュ値を比較する。 ---- DSAは署名データをもとにもどせませんからね。

  • 今、SunのサイトのjavaAPIリファレンス見られますか?

    たとえば http://java.sun.com/j2ee/sdk_1.3/ja/techdocs/api/index.html とか、 http://java.sun.com/j2se/1.4/ja/docs/ja/api なんですが・・・。

    • ベストアンサー
    • Java
  • ディジタル署名について

    情報処理技術者の勉強してます。 公開鍵暗号化方式の問題では、受信者の公開鍵で暗号化して受信者は自分の秘密鍵で複合するとあります。 ディジタル署名では、送信者の秘密鍵で暗号化して送信者の公開鍵で複合化とありますが それならばなぜ公開鍵暗号化方式は送信者の秘密鍵で暗号化して送信者の公開鍵で複合化と回答すると間違いなのでしょうか?

  • Visual C#でのメソッド

    Visual C# でプログラミングしようと思ったのですが、メソッドの一覧などはどこでわかるのでしょうか? たとえば、javaでならhttp://java.sun.com/j2se/1.3/ja/docs/ja/api/index.html このようなページを見てやってたのですが、 C#ではこういった情報の入手方法がわからず困っています。 わかるかたがいたら教えてください。

  • CPUの個数

    はじめまして。 早速ですがお聞きしたいことがあります。 Javaでそのマシンに搭載されているCPUの個数を取得したいのですが、可能でしょうか? もし可能であるならば方法を教えてください。 googleで CPU 個数 site:java.sun.com/j2se/1.5.0/ja/docs/ja/api/ というキーワードで検索してみたのですが、目的の情報は見つかりませんでした。 すみませんがよろしくお願いいたします。

    • ベストアンサー
    • Java

専門家に質問してみよう