/anninbon

Primary LanguageHTML

『暗認本』補足

『暗認本』紹介ページに戻る

sec.06 安全性

Q. アルゴリズムは曖昧性のないように書くべきとあるのに「十分大きなnに対してほぼ~」という表現があいまいで分からない。

A. 本では省略していますが数学的には厳密な定式化をします。 気持ち的にはたとえば「ほぼ2倍」というのが2倍からどれぐらいずれているかをεで表します(ε=0.1とか0.0000001とか)。 そして誤差がεよりも小さくなるようなNを求めます(Nはεに依存しうる)。 εをどれだけ小さくしてもn > Nなら常に誤差がεより小さくなるようなNを見つけられる状態を「十分大きなn」と表現しています。

sec.07 暗号技術の危殆化

p.054 「大きなデータを手元の小さい鍵で暗号化してサーバに置いておくという形で未来永劫安全という方法は現時点で存在しません。」

参考文献 : "Communication Theory of Secrecy Systems", Shannon

  • perfect secrecy ; 暗号文から元の平文の情報を何も得られないこと。
  • perfect secrecyを満たす共通鍵暗号は、秘密鍵のとり得る数が平文のとり得る数以上でなくてはならない。

sec.10 乱数

/dev/urandomがIntelの乱数生成命令rdrandがハックされた場合に制御できる問題がLinux Kernel 3.8.13に存在した例。

sec.23 楕円曲線暗号

p.134 ECDHPとECDLP

この節のaやbは前節の楕円曲線の加算公式に出てくるa, bとは無関係の勝手な数を表します。

sec.26 SHA-2とSHA-3

パディングとpadding

本ではデータをブロックのサイズに調整することをカタカナで「パディング」、パディングされたブロックを英語で「padding」と記してあります。 やや分かりづらい区別で申し訳ない。

Q. マークル・ダンガード構成とスポンジ構造の違いがあまり分からなかった。

A. マークル・ダンガード構成は内部状態と最後のハッシュ値の大きさが同じです。 圧縮関数fは内部状態SとブロックBを非可逆に混ぜながら新しい内部状態を出力します。

それに対してスポンジ構成では内部状態は最後のハッシュ値よりも大きいです。 内部状態Sの先頭にブロックBを排他的論理和したあと、内部状態を置換関数fで混ぜます。 「置換」なので可逆です。

マークル・ダンガード構成は最後のハッシュ値hが内部状態なのでhが決まると最後の内部状態が分かります。 したがって、その次にブロックをつけるとハッシュ値hから次の内部状態が確定します。 そのため伸長攻撃が可能になります。

スポンジ構成では、ハッシュ値が分かっても直前の内部状態は不明な部分が残っています。 そのため伸長攻撃ができません。

sec.29 署名

p.172 「(署名鍵)sは認証器の内部に安全に保存する。」

署名鍵の保存方法にはいくつか方法があります。

  1. 本で紹介しているように認証器の内部に安全に保存する。
  2. もう一つは署名鍵sをその認証器だけが復号できる方法で暗号化してRPに保存してもらう方法です。 この方法だと認証器に保存する必要がないのでストレージの容量が少なくて済みます。 ただし、認証時にRPから認証器にその情報を送ってもらって復号する必要があります。

6.2.2. Credential Storage Modality」参照

sec.31 タイムスタンプ

  • ハッシュ値を連鎖させるリンクトークン方式はブロックチェーンの肝ですが、タイムスタンプの規格としては世界的に使われない傾向にあります。
    • NTTデータのSecureSealは2020年に終了しました。
  • 現在は時刻認証局のTSA証明書を使ったPKI方式が主流です。
  • 総務省のタイムスタンプについて
  • PKI方式のタイムスタンプは通常10年保証されます。そしてタイムスタンプがついたデータやそれを検証する認証局の公開鍵証明書などをまとめて別のタイムスタンプをつけること(アーカイブタイムスタンプ)でより長い有効期間を得られます。

sec.33 公開鍵基盤

p.193 信用の輪

「信頼」と「信用」のどちらを使うか迷ったのですが、ここではGnuPGの日本語ドキュメントに従って「信用の輪」としました。 他には「信頼の輪」「信頼の網」などの訳があります。 「信頼できる OpenPGP 公開鍵を提供する公開鍵サーバ OpenPKSD Trusted Keyserver 開発成果報告書」は「信頼の輪」を使っています。

cf. 信用と信頼の違い

p.196 GPKIとFirefox

Add Renewed Japanese Government Application CA Root certificateで議論の経緯が見られます。

sec.37 TLS

Edwards曲線とCruve25519

Edwards曲線(厳密にはtwisted Edwards曲線)とは方程式(E) $ax^2 + y^2 = 1 + dx^2 y^2$ で定義される曲線です(細かい条件は除く)。 一方、Curve25519は方程式(M) $v^2 = u^3 + A u^2 + u$ で定義される曲線です。

一見異なる方程式なので別物に見えます。しかし、方程式(M)は次のようにすると方程式(E)の形に変換できます。

$$u = (1+y)/(1-y)$$ (T1) $$v = \sqrt(-A-2) u/x$$ (T2)

(T2)を(M)に代入する

  • $(-A-2) u^2/x^2 = u^3 + A u^2 + u$ ; 両辺を $u$ で割り $x^2$ を掛ける
  • $-(A+2) u = (u^2 + Au + 1)x^2$ ; (T1)を代入して両辺に $(1-y)^2$ を掛ける
  • $-(A+2) (1+y)(1-y) = ((1+y)^2 + A (1+y)(1-y) + (1-y)^2)x^2$ ; 両辺を展開して整理する
  • $-(A+2)(1-y^2) = ((2-A)y^2 + A + 2)x^2$ ; 両辺を $A+2$ で割る
  • $y^2 - 1 = ((2-A)/(2+A)y^2 + 1)x^2$ ; $d = (2-A)/(2+A)$ として移項する
  • $-x^2 + y^2 = 1 + d x^2 y^2$

この式は方程式(E)で $a=-1$ としたものです。 逆にこの式に対して

$$x = \sqrt(-A-2)u/v$$ (T'1) $$y = (u-1)/(u+1)$$ (T'2)

とすると方程式(M)に戻ります(詳細は略)。

ただ(T1), (T2)と(T'1), (T'2)が逆変換になっていることだけ見ておきましょう。

  • (T2)の両辺に $x$ を掛けて $v$ で割ると(T'1)になる
  • (T1)の両辺に $1-y$ を掛けて $u - uy = 1 + y$。移項して $u - 1 = (u+1)y$。よって(T'2)になる

このような変換で相互に移り変わるものを双有理同値といい、代数幾何学では同じものとみなします。 表現形式が違うだけで本質は同じという考え方ですね。