What is it, naokirin?

公開鍵暗号の基本

公開鍵暗号は公開鍵と秘密鍵を用いて、公開鍵を不特定多数の相手に公開、秘密鍵は鍵作成者が秘密として持つという方式の暗号である。
公開鍵は鍵作成者に送りたい平文の暗号化に用い、秘密鍵はその暗号化された暗号文を平文に戻す。

これは、公開鍵の暗号化関数が一方向性関数でなければ成り立たない方式である。一方向性関数とは、順方向では計算が容易だが、逆方向の計算は現実的には不可能な関数の事である。しかし、現代の暗号では、数学的に完全な一方向性関数ではなく、現実的な時間で暗号化関数の逆関数が求められなければよいという前提で、暗号方式を設定する。

公開鍵暗号には代表的な二つの暗号方式が存在し、素因数分解の困難性に依拠したRSA暗号、もう一つが離散対数問題に依拠しているエルガマル暗号である。


暗号において、その安全性は「どの程度の安全性か」と「どの程度の攻撃か」の両方で評価しなければならない。

安全性としては、平文がまるまる解読されてしまうことから、平文に関する何らかの情報まである。
平文に関する何らかの情報とは次のような特性が考えられる。

・強秘匿性(SS)
  平文のうちの1ビットでも0か1のどちらかの確率である方が高い、といったことが多項式時間で判定されないという安全性。

・非展性(NM)
  平文は知らされていないという条件のもとでそれに対応する暗号文が与えられているときに、平文に何らかの関連性を持つ他の平文に対応する暗号を作成することは多項式時間ではできないという安全性。

・識別不可能性(IND)
  平文M1が暗号文C1、平文M2が暗号文C2に対応しているときに、その対応を知らされていない攻撃者が平文と暗号文の対応を多項式時間では判定できない、という安全性。


また攻撃のレベルとしては通常

・適応的選択暗号文攻撃(CCA2)
  攻撃者が復号器を使える状態で、復号器に送付した暗号文に対して得られた平文を見た後、次に送る暗号文を考える(次の手を考える)攻撃。

に対してなんらの平文情報も漏らさないような安全性が求められる。
CCA2に対してはSS、NM、INDともに同等であることが証明されている。そこで安全性証明が比較的容易なIND-CCA2の組み合わせがよく用いられている。


ということを勉強した。確かに暗号を勉強するといっても、暗号の数学的理論ばかりで、安全性をどのような基準で評価するか、といったことは勉強したことがなかった。

現在はRSA暗号やエルガマル暗号をさらに発展させたもの(たとえば超楕円暗号など)が使われているようである。

もちろん、プログラムとして暗号方式を作成する場合は、アルゴリズムだけでなく、プログラム上の欠陥にも注意する必要がある。
SSLも一時期、プログラム欠陥におけるセキュリティ脆弱性があったようである。暗号理論とプログラムの精度の両方が保たれてこそ、本当の意味で暗号による安全なネットワーク通信がおこなわれることになるということである。

だから、高品質なプログラムを作れるようにテスト駆動開発とか、デバッギングとかの技術もしっかりと学んでいきたい。