調査

暗号まわりのお勉強2~共通鍵暗号方式のストリーム暗号~

投稿日:

今回は共通鍵暗号方式について、少し深く見ていきます。

暗号まわりのお勉強1でも若干触れましたが、どのような方式かを先におさらいします。

共通鍵暗号方式の概要

暗号化と復号に用いる鍵が同一である暗号方式です。対称暗号、秘密鍵暗号方式とも言われます。

大まかな手順

  1. 共通鍵を生成する。
  2. 共通鍵を通信相手に配布する。
  3. 送信者は、平文を共通鍵で暗号化し、受信者へ暗号文を送信する。
  4. 受信者は、受け取った暗号文を共通鍵で復号する。

メリットとデメリット

メリット 公開鍵暗号方式に比べて処理速度が速い
デメリット 鍵配送問題がある(予め安全に鍵を共有しておく必要があるが、その実現が困難)
通信相手の数だけ鍵が必要になる

スポンサードサーチ

共通鍵暗号方式の細分類

では、共通鍵暗号方式について、もう少し踏み込んで見ていきましょう。

共通鍵暗号方式は、暗号化の仕方によってブロック暗号とストリーム暗号に分類することができます(ブロック暗号の仕組みを取り入れたストリーム暗号のようなものもあるので正確な区分ではないのですが、難解な話になるためここでは省略します)。

本稿ではストリーム暗号について取り上げます。

ストリーム暗号

方式

平文(Pとします)と、キーストリーム(Zとします)との排他的論理和をビット/バイト単位で取ることで暗号化・復号を行う方式です。

キーストリームは、秘密鍵や初期化ベクトル(initialization vector, IV)をシードとして生成される任意長の擬似乱数です。

暗号化の際は、平文PとキーストリームZの排他的論理和を取る処理を行うことで、暗号文Cを作成することができます。

P⊕Z = C

復号の際は、暗号文CとキーストリームZの排他的論理和を取る処理を行うことで、平文Pを復元することができます。

C⊕Z = P⊕Z⊕Z = P

ブロック暗号と比べたときのメリットとデメリット

メリット 処理が単純で計算速度が速い
すぐに暗号化を開始できる
データサイズの増加がない(平文と暗号文でデータ量が等しい)
デメリット 安全性の評価基準が十分に確立されていない

キーストリーム暗号のアルゴリズム

キーストリーム暗号のアルゴリズムには、ChaCha20、RC4、MUGI、SEAL、MULTI-S01などがあります。

ここでは、主要なアルゴリズムであるChaCha20とRC4について少し踏み込んで見ていきましょう。

ChaCha20

ChaCha20はD.J.Bernstein氏が考案したストリーム暗号で、SalSa20(こちらも同氏が考案)の変種です。Poly1305(こちらも同氏が考案)というメッセージ認証と組み合わせて、TLSに利用されています。

2015/5にIETFが発行するRFC7539でそれぞれ標準化され、2016/6にRFC7905でChaCha20-Poly1305暗号スイートのTLSへの利用が提案されました。

ChaCha20/rは、64byteの入力ストリーム(平文ストリームではありません)を4x4のマトリックスと考えて、r回のクォーターラウンド操作(加算演算、排他的論理和演算、回転操作)を行い、64byteのキーストリームを得ます。

入力ストリームの内訳は次の4種類、16ワードです。

  • 32bit定数4つ⇒4ワード(four 32bit constant integer)
  • 256bit鍵1つ⇒8ワード(A 256-bit key, treated as a concatenation of eight 32-bit little-endian integers)
  • 96bitナンス1つ⇒3ワード(A 96-bit nonce, treated as a concatenation of three 32-bit little-endian integers)※他のアルゴリズムで言う、初期化ベクトルの役割。
  • 32bitブロックカウンタ1つ⇒1ワード(A 32-bit block count parameter, treated as a 32-bit little-endian integer)
    ⇒合計512bits=64byteの入力、4+8+3+1=16ワード

このキーストリームと平文ストリームの排他的論理和を取ることで暗号文が、キーストリームと暗号ストリームの排他的論理和を取ることで平文を導くことができます。

平文ストリームの内訳は次の通りです。

  • 256bit鍵
  • 32bit初期カウンタ(数値はいくつでも構わないが、通常0か1)
  • 96bitナンス※ほかのアルゴリズムで言う、初期化ベクトル
  • 任意長の平文
RC4(ARC4、ARCFOUR、Alleged-RC4)について

RC4は、当時RSA Data Security社に在籍していたRonald Rivest氏が考案し、何者かがインターネットに公開したアルゴリズムです。厳密にはRC4の名称はRSA Data Security社の登録商標で、なおかつRSA Data Security社が仕様を公開したこともないため、ARC4、ARCFOUR、Alleged-RC4などと呼称されます。

非常に短いコードで記述でき、処理速度も速い点が特徴と言えます。

しかし、かつてはTLSで使われていたものの、2015/2に発行されたRFC7465では、もはや充分なセキュリティレベルはなくTLSに使用してはならないとされています。また、RC4は無線LAN通信における暗号プロトコルの1つであるWEPにも使用されていますが、WEP自体が脆弱であるため使用は推奨されません(通常、WPA2を利用するでしょう)。

RC4の鍵長は8bitから2048bitの間から選択できる可変長ですが、鍵長は128bitとされるケースが多いです(かつてのTLSでも128bitが利用されていました)。

内部状態は2のn乗個の要素を持つ配列と2個のポインタからなります。要素と配列はそれぞれnビットの変数で、通常n=8とします。

暗号化及び復号の手順は次のようになります。

  1. KSA(鍵スケジューリングアルゴリズム)に秘密鍵を入力することで内部状態を初期化
  2. PRGA(擬似乱数生成アルゴリズム)にその内部状態を入力することでキーストリームを取得
  3. キーストリームと平文の排他的論理和をとることで暗号文を、キーストリームと暗号文の排他的論理和をとることで平文を導出

ストリーム暗号の用途

ストリーム暗号は、ビット単位から逐次暗号化が可能であることから、データのサイズが決まっていない状況で暗号化するのに向いていると言えます。

例として、Web上で暗号化通信を行うSSL/TLS、無線LANで暗号化を行うWEP・WPAなどに使われています。いずれも、入力されるデータサイズが予め決まっておらず、ストリーム暗号の特徴を活かしていると言えるでしょう。ただし、無線LANの暗号化では、セキュリティの高さからブロック暗号のAESを用いたWPA2を利用することが推奨されます。

-調査
-, , , ,

Copyright© 暗号通貨界隈のメモ書きなど。 , 2019 All Rights Reserved Powered by STINGER.

%d人のブロガーが「いいね」をつけました。