背景
サイバーセキュリティ技術を支える“乱数”について、その特性や生成方式についてまとめてみました。
乱数って何?という方、もしくは、乱数のことを知っているけど、業務でもう少し踏み込んだ話をしなければならない方にとって有益な情報になることを願い執筆致しました。
少しでもお役に立つ情報であれば幸いです。
乱数とは
乱数とは、規則性がない値のことです。例えば、以下のように、次の値が予測できない性質があります。
4、75、8、47、15、6、・・・
逆に、1、2、3、4、・・・というような値は規則性がある値といえます。
乱数の身近な利用用途
この乱数は様々な用途で活用されています。
身近な用途として、テレビゲームがあります。
例えば、草むらを歩いていると動物に遭遇するゲームがあるとします。
1回目はハト、2回目はネズミ、3回目はスズメというように、次はどの動物に遭遇するかがユーザーからはわからないようになっています。
これを実現するために乱数生成技術が利用されています。
何回も同じ動物に遭遇するゲームは面白くないですよね。
乱数は何故サイバーセキュリティ技術を支える重要技術とされているのか?
乱数は何故サイバーセキュリティの重要技術とされているのかについて解説します。
ここで記述している内容は氷山の一角ですので、詳しく知りたい方はこちらの書籍をご覧いただくと良いかと存じます。
現実世界では、家の鍵を落としたり盗まれたりした場合、鍵を新しく作ると思います。
それは、紛失したその鍵を利用できなくし、家を泥棒から守る目的で行います。
サイバーセキュリティの世界で考えますと、通信先の相手が信用できるかを判断するために乱数の技術が利用されています。
具体的には、チャレンジ&レスポンス方式という認証技術に乱数が利用されています。
これは、認証をする側が乱数を生成し、チャレンジコードとして認証される側へ送信します。
認証される側はチャレンジコードに対し、事前に共有している鍵を利用してレスポンスコードを生成し返信します。
認証をする側も同様にチャレンジコードに対しレスポンスコードを生成し、返信された値と照合します。
一致した場合は通信先を信用できると判断します。
ここで、ポイントとなるのが、チャレンジコードとレスポンスコードは毎回異なる値にし、以前のコードを利用できなくする必要があるということです。
チャレンジコードおよびレスポンスコードを毎回異なる予測不能な値とすることで、これを実現しています。
仮に、チャレンジコードとレスポンスコードが毎回同じ値であると、攻撃者がレスポンスコードを盗聴し再送することで、正規の通信先に成りすますことが可能です。
このような攻撃のことを再送攻撃(リプレイ攻撃)と呼びます。
乱数はこのような攻撃への対策として利用されています。
ここで、乱数には種類があり、真性乱数と疑似乱数の2つが知られています。
真性乱数とは
真性乱数とはNIST SP800-90Bでは以下のように定義されています。
常にエントロピー ソースにアクセスでき、(適切に動作している場合) 完全なエントロピーを持つ出力を生成する RBG。
真のランダム ビット (または数値) ジェネレーターとも呼ばれます (DRBG と対比)。
簡単に言いますと、過去の値から予測/推測ができず、再現ができない乱数のことです。
乱数を生成するためには入力情報が必要ですが、この入力情報に物理的な現象(ノイズ)を利用する点が特徴的です。
具体的には、熱や音の変化などの自然現象をセンサー(ハードウェア)で検知し、その結果を基に乱数を生成します。その乱数の源泉となる生成源の代表例を2つ記載します。
- 熱雑音
- リング発振器
真性乱数の生成方式①~熱雑音方式~
熱雑音方式は、温度の変化量をデジタルデータに変換することで乱数を生成します。
そのため、熱雑音方式は温度による影響を受けやすいとされています。
つまり、温度が高温だったり低温だったりすると、温度の変化量に偏りが発生します。
そのため、熱雑音方式は十分にランダムな乱数が生成できないリスクを抱えています。
真性乱数の生成方式②~リング発振器方式~
任意の個数のインバーターを環状に接続した回路のことをリング発振器(リングオシレータ)と呼びます。
この仕組みは、インバーターのハードウェア的なバラつき(伝送遅延やハードの違い)を利用してランダムな値を生成します。
熱雑音方式と異なり、温度に依存しません。
疑似乱数とは
一方、疑似乱数とは、真性乱数とは異なり、論理的に乱数を生成する方式です。
そのため、真性乱数と比較し、過去の値から予測/推測、再現が可能なリスクを抱えています。
NISTSP800-90Bでは以下のように定義されています。
DRBG メカニズムを含み、(少なくとも最初は) エントロピー入力のソースにアクセスできる RBG。 DRBG は、シードと呼ばれる秘密の初期値と他の可能な入力からビットのシーケンスを生成します。DRBG は、疑似乱数 (またはビット) ジェネレーターと呼ばれることがよくあります。
ちょっと難しいことが書かれていますが、疑似乱数を生成する際、シードと呼ばれる初期値に対し何らかの計算を施して不規則な数列を生成すると思っていただければと存じます。
非常に簡単な例ですが、シードを123456789とします(こんなシードないかもですが)。
これを2倍すると246913578になります。
さらに2倍すると493827156になります。
見た目上、何となく乱数っぽいですが、前の値を2倍しているようだから、次の値は987654312になるんでは?と予測できてしまいます。
疑似乱数はこのように、計算で導かれるため、確定的な値となってしまう点が弱点です。
まとめ
乱数の種類と特徴についてまとめてみました。
- 乱数とは規則性がない値のこと
- 乱数には真性乱数と疑似乱数の2種類がある
- 乱数は様々な暗号技術に利用される重要技術
[…] 乱数の種類(真性乱数、疑似乱数)とそれぞれの特徴 […]