1. プログラミング
  2. web3

暗号技術


2022年10月24日

暗号技術

暗号技術は、コンピューターとネットワークを使って生活やビジネスを行っている私たちの秘密を守り、情報の正しさを確かめるために存在する。

暗号 メッセージが盗聴されても読めなくする
一方向ハッシュ関数 メッセージが書き換えられたことを検出する
デジタル署名 正しい相手からのメッセージであることを確かめる

メールのやり取り

メールを他人に読まれては困る場合、メールを暗号化(encrypt)してから送る。 暗号化する前のメッセージを平文(plaintext)と呼び、暗号化した後のメッセージを暗号文(ciphertext:サイファテキスト)と呼ぶ。

メールの受信者は、暗号文のままでは読めないので、暗号文を復号化(decrypt)してから読むことになる。 復号化とは、暗号文を元の平文に戻すことを言う。

対象暗号と公開鍵暗号

複雑な問題を解くための手順のことをアルゴリズム(algorithm)と呼ぶ。暗号化と復号化のアルゴリズムを合わせて暗号アルゴリズムと呼ぶ。

暗号アルゴリズムには(key)が必要になる。暗号アルゴリズムの鍵は大きな数字がその役割を果たす。 暗号化を行うときも、復号化を行うときも鍵は必要になり、鍵の使い方によって暗号は2種類に分類できる。

  • 対象暗号(symmetric cryptography)は、暗号化と復号化で同じ鍵を使う
  • 公開鍵暗号(public-key cryptgraphy)は、暗号化と復号化で異なる鍵を使う

公開鍵暗号は、非対象暗号(asymmetric cryptgraphy)と呼ばれることもある。公開鍵暗号は1970年台に発明され、暗号の正解に一大変革を生み出した。 現代のコンピューターやインターネットにおけるセキュリティは、公開鍵暗号に大きく依存している。

その他の暗号技術

  • ハイブリット暗号システム(hybrid cryptsystem)
  • 一方向ハッシュ関数
  • メッセージ認証コード(message authentication code)
  • デジタル署名(digital signature)
  • 疑似乱数生成器(PRNG)

 

機密性 真正性 認証 否認不可能性
秘密が漏れる 情報の書き換え なりすまし 後から私じゃない
対象暗号
公開鍵暗号
ハッシュ関数
メッセージ認証
デジタル署名

アルゴリズムと鍵

  • 新しい暗号アルゴリズムを生み出すことは簡単ではない
  • 開発した暗号アルゴリズムを繰り返し使いたい
  • 同じ暗号を繰り返し使っていると解読される可能性が高まる

暗号アルゴリズムに「変更可能な部分」を用意しておき、そこを通信ごとに変更することで対応する。それが「鍵」である。

現代の暗号アルゴリズムには標準化技術がつきものになっている。 暗号という機密性が必要な分野で標準化とは変な話だが、標準化して人類の共有財産することで研究開発が進む。 暗号アルゴリズムと鍵は分かれているので、標準化を行っても機密性が低くなるわけではない。

鍵こそが機密性の源泉であるから、暗号技術において「鍵の管理」はきわめて重要となる。

文字の暗号からビット列の暗号へ

現代の暗号はコンピューターを使うことが前提となっている。コンピューターの操作対象は文字ではなく、0と1が並んだビット列となる。 現実世界にあるものをコンピューターで扱えるようにビット列に対応付けることを符号化(encoding)と呼ぶ。

例えば、「midnight」という文字列は、1文字ずつ次のようなビット列に符号化することができる。このルールはASCⅡと呼ばれている。

m 01101101
i01101001
d01100100
n01101110
i01101001
g01100111
h01101000
t01110100

コンピューターの中では「midnight」という文字列は、このようなビット列で保持されている。

対象暗号

  • DES(Data Encryption Standard)
  • 3DES(triple-DES)
  • AES(Advanced Encryption Standard) = Rijndael

大きな鍵空間を持ち、アルゴリズム上の弱点を持たない対象暗号を用いると、暗号文により平文の機密性を守ることができる。 しかし、対象暗号を使って通信を行うためには、鍵を安全に受信者に送らなければならないという鍵配送問題(key distribution problem)が残る。

公開鍵暗号

公開鍵暗号(public-key cryptography)では、「暗号化の鍵」と「復号化の鍵」を分ける。

  • 送信者が必要なのは「暗号化の鍵」だけである
  • 受信者が必要なのは「復号化の鍵」だけである
  • 盗聴者に知られて困るのは「復号化の鍵」だけである
  • 盗聴者に「暗号化の鍵」を知られても困らない

受信者が「復号化の鍵」を最初から手元に置いておき、送信者が「暗号化の鍵」を手に入れられるのなら、鍵配送問題を解決できる。

公開鍵暗号では、「暗号化の鍵」のことを公開鍵(public key)と呼ぶ。公開鍵は誰に知られても問題は無いので公開が可能。 少なくとも暗号化を行う送信者には私ておく必要がある。 一方、「復号化の鍵は」は絶対に公開してはいけない。こちらは自分だけが使うものでプライベート鍵(private key)と呼ぶ。

公開鍵とプライベート鍵は、2本で一対になっている。この鍵の対のことを鍵ペア(key pair)と呼ぶ。 公開鍵で暗号化した暗号文は、その公開鍵とペアになっているプライベート鍵でしか復号化できない。 また、ペアをなしている2本の鍵は、数学的な関係があるので、公開鍵とプライベート鍵を別個に作ることはできない。

RSA

RSAは、現在最も使われている公開鍵アルゴリズムで、3人の開発者の頭文字をから命名されている。 RSAの暗号文は、平文を表す数をE乗してmod Nを取っただけの非常にシンプルなものになる。

$$ 暗号文 = 平文^E \mod N $$

EとNの一組が分かれば誰でも暗号化でき、このEとNの組が公開鍵となる。 鍵ペアではないので注意。

RSAの復号化もシンプルで次の式で表すことが出来る。 暗号文をD回掛けて、その結果をNで割った余りを求めると、それが平文となる。

$$ 平文 = 暗号文^D \mod N $$

ここで使われているNは、暗号化の時に使ったNと同じ。DとNの組がプライベート鍵に相当する。 Nは公開鍵の一部となっているので、Dだけをプライベート鍵と考えることもできる。

RSAは、桁数が大きい合成数の素因数分解が現実的な時間内で困難であることを安全性の根拠としており、E、N、Dはどんな数でも良いわけではない。 この3つを求めるのは、鍵ペアを生成することとに他ならない。詳しくは下記を参照。

wiki:RSA暗号
➡ 暗号技術入門 第3版 結城浩著(P131-)

メッセージ認証コード

  • メッセージが「改竄」されているかもしれない
  • 送信者に「なりすまし」た誰かが送ってきたかもしれない
  • 後から送ったのは自分ではないと「否認」するかもしれない
  • メッセージ認証コード(message authentication code)は、正真性を確認し、メッセージの認証を行う技術。 上記の問題の上2つに対応する。頭文字をとって、MACと呼ばれる。

    任意長のメッセージと、送信者と受信者が共有する鍵の2つの入力を異にして、固定ビット長の出力を計算する。この出力をMAC値と呼ぶ。 任意長のメッセージから固定ビット長の出力を計算する点は一方向ハッシュ関数と同じだが、共有鍵を使う点が異なる。 メッセージ認証コードは、鍵に依存した一方向性関数と考えると理解しやすい。

    鍵に依存というのは、送信者と受信者が鍵を共有する必要があることを意味する。つまり、対象暗号と同じように「鍵配送問題」を抱える。

    デジタル署名

    デジタル署名は、印鑑の捺印やサインに相当する機能をコンピューターの世界で実現するための技術。

    SSL/TLS

    楕円曲線暗号

    楕円曲線暗号(Eliptic Curve Cryptography : ECC)は、公開鍵暗号の代替するものとして考案された。 公開鍵アルゴリズムと比べて鍵のビット数を少なくできるのが特徴。 楕円曲線を利用した暗号方式の総称で離散対数問題に基づいている。図形の楕円とは無関係。

    楕円曲線と呼ばれる曲線を定め、その曲線の上に乗っている点に対して特殊な「乗算」を定義する。この乗算の逆演算が難しいことを利用している。

    プログラミングの最新記事

    1. 一方向ハッシュ関数

    2. 暗号技術

    3. web3の流れに追いつこう

    4. WordPress開発環境

    5. 【Hugo】マークダウンファイルの中にHTMLコードを挿入する

    PAGE TOP