haskell-ja > Archives > 2013/02/08

2013/02/08 00:50:50 UTCcutsea110
#
doctest使ってみた
#
思ったんですが、正解となる値として(Right 4, [])みたいなのを書いているとエラー判定されちゃう。(Right 4,[])という風に[の前のスペースがアウトらしい。この辺り文字列として(==)判定しているのかな。
#
すでに実装があるものにテストを付けておくのは、ghciで実行して結果をコピペでいいんだけど、先にテストを書いて通るまで実装という風にしている場合値として(==)かどうかで判定してほしいかな。
#
この例だと簡単に目で分かるけど複雑なものだとちょっとつらいかも。
2013/02/08 01:03:49 UTCkazu
#
今の実装は、GHCi との対話的な結果を文字列比較しているだけです。(==) で比較するように改良すると、例外の比較はどうするんだとか、型が決まらない場合はどうするんだとか、いろいろ問題が出てきそうです。
2013/02/08 01:08:53 UTCcutsea110
#
あーそうか、すべてが健全な値ばかりとは限らないのですね。
#
テストを書く側が expr == (Right 4, []) => Trueみたいにして運用すればいいのかな。
#
実は Left _ みたいなのも出来ないかなって思ってたんですが。Left "error message"なやつでメッセージ文字列はいちいち変わるかもしれないから気にしないみたいなの。
2013/02/08 01:16:00 UTCkazu
#
例題で fst を取れば解決ですね。
#
スペースの問題は、FAQ に書いておいて、利用者が気をつけるというのが現実的だと思います。
2013/02/08 01:33:31 UTCcutsea110
#
別の話になるんですがRSAの署名について教えてください。
2013/02/08 01:34:09 UTCkazu
#
何をですか?
2013/02/08 01:35:44 UTCcutsea110
#
RSAの場合秘密鍵で署名を作成しますよね。
2013/02/08 01:36:20 UTCkazu
#
はい。
2013/02/08 01:36:44 UTCcutsea110
#
で、それを公開鍵を持っている人が復号化するわけですが、HaskellのCodec.Crypto.RSAのAPIを見る限り、
#
verifyは署名(暗号文)と署名の元になった平文で判定しています。
#
このAPIに限らず、署名を復号した時にどんな平文が出てきたらOKと見做すんでしょうか?
#
そもそも正しい秘密鍵による署名じゃなければ複合が出来ない?
#
このAPIからすると署名のもとになった平文も送ってやらなきゃならないんじゃないのか?と。
2013/02/08 01:42:45 UTCkazu
#
素朴な利用方法ではそうですけど、普通は平文のハッシュを取って、ハッシュ値を秘密鍵で暗号化します。なので、署名に加えてハッシュ値を送れば OK です。
#
素朴な利用であれ、なんであれ、完全一致した場合にのみ、署名の検証が成功したとみなされます。どこか1ビットでも一致しなければ、*何か*が改ざんされたとみなします。
2013/02/08 01:44:43 UTCcutsea110
#
平文のハッシュから署名を生成するのですか?平文からではなく。
2013/02/08 01:45:16 UTCkazu
#
普通はそうです。だから、一回の暗号化で済みます。
2013/02/08 01:46:20 UTCcutsea110
#
むむ?結局ハッシュを平文だと思えば、平文から生成した署名と平文が送られることになりません?
2013/02/08 01:46:47 UTCkazu
#
ええ、そうですよ。
2013/02/08 01:47:43 UTCcutsea110
#
たとえば、kazuさんが署名を作成して公開するとすると、署名とその元になった文字列(平文=ハッシュ)がセットで公開されるんですよね。
#
私がそのセットを「私はkazuです。ほれこの通り」という風に使ったらどうなるんでしょう。
2013/02/08 01:49:07 UTCkazu
#
署名を cutsee110 さんの公開鍵で復号化しても、元のハッシュ値と一致しません。
2013/02/08 01:50:06 UTCcutsea110
#
あ、いやkazuさんからcutsea110がkazuさんの署名と平文をもらったとします。
#
kazuさんの公開鍵でverifyしたら正しかった。
#
ということはこのkazuさんから受け取った署名と平文のセットはkazuさんを証明するものとして使えそうだと思いました。
#
私にはその平文がどのように暗号化されたかはわかりませんが、コピーとして署名を持っているのでそれをそのまま流用することはできそう。
2013/02/08 01:55:24 UTCkazu
#
どう流用できるのか具体的に教えて下さい。そうしないと「それはできない」と説明できません。
2013/02/08 01:55:46 UTCcutsea110
#
単純にそのコピーを送るだけです。
2013/02/08 01:56:58 UTCkazu
#
それは、さっきできないと説明しましたね。
2013/02/08 01:57:26 UTCcutsea110
#
?受け取った署名と平文をそのまま送ることができない?
2013/02/08 01:57:29 UTCkazu
#
送ることはできても、検証したらすぐにバレます。
2013/02/08 01:57:41 UTCshiro
#
「kazuさんを証明するもの」じゃなくて、「kazuさんがその平文に署名したことを証明するもの」じゃないっすか? 第三者がいくらでも平文+署名を再頒布することは出来るので、「その平文+署名の*送り主*が誰か」ということはここでは気にしてない。
2013/02/08 01:58:34 UTCkazu
#
何がポイントなのかよく分かりません。
2013/02/08 01:58:48 UTCshiro
#
ああ、kazuさんの公開鍵をcutseaさんが「私の公開鍵です」と言って公開することまで考えてる? でも平文中に「kazu著」と入ってたらcutseaさんにはどうしようもない。
2013/02/08 01:58:51 UTCkazu
#
誰がそれを送ろうと、僕の公開鍵で検証すれば、OK になります。
2013/02/08 01:59:01 UTCcutsea110
#
そうです。
2013/02/08 01:59:08 UTCkazu
#
cutsee さんの公開鍵で検証すれば NG となります。
2013/02/08 01:59:14 UTCcutsea110
#
もちろん。
2013/02/08 01:59:45 UTCkazu
#
公開鍵がだれのものか調べる方法がないと言っているのですか?
2013/02/08 02:00:31 UTCcutsea110
#
あー、なんとなく分かってきた。
#
平文がshiroさんの言う署名を付ける対象となるドキュメントってことですか?
#
署名を付けたいドキュメントがあって、それからハッシュを求めて、そのハッシュを秘密鍵で暗号化してハッシュとともに配賦すれば
2013/02/08 02:01:45 UTCkazu
#
shiro さんは、どっから出てきたんですか?
2013/02/08 02:01:46 UTCshiro
#
署名って、ある文書に対してするものですよね。「この文書は私が書きました」とか「この文書に間違いがないことを証言します」とか。
2013/02/08 02:01:54 UTCcutsea110
#
その元のドキュメントに署名を付けたってことだと。
2013/02/08 02:02:39 UTCkazu
#
はい。そうです。今までそうじゃないと思ってたのですか?
2013/02/08 02:03:45 UTCcutsea110
#
はい、平文との関係が分かってなかったです。
2013/02/08 02:05:36 UTCkazu
#
ちなみに、公開鍵が本当にその人のものであることを署名するためには、公開鍵を平文とみなして署名します。
#
だれが署名するかを「信用モデル」といいます。
#
信用モデルには、大きく分けて2つあります。
#
PGPが採用している「信頼の輪」と TLS なんかが採用している CA です。
2013/02/08 02:13:51 UTCcutsea110
#
ありがとうございました。 > kazu, shiro
#
ようやく今やろうとしていることに、どう使うのか見えてきました。
2013/02/08 02:19:54 UTCkazu
#
どう勘違いしていたのか分かりませんでしたが、とにかく分かったようで、よかったです。