モダンな暗号方式
暗号には様々な方式やアルゴリズムが存在し、中には容易に攻撃が可能となっている危殆化したアルゴリズムも存在します。 それらを確認せずに利用してしまうと、情報流出などサービス提供者は大きな損害を被ることになりかねます。
2023年現在、安全であると考えられている暗号方式を確認することによって、危殆化したアルゴリズムからの攻撃を防ぎましょう。
共通鍵暗号
AES
NISTで標準化された共通鍵暗号方式で、Rijndaelという方式が採用されました。 これを選んでおけば大丈夫です。
最近のCPUにはAESのための命令( AES-NI )が搭載されているので高速に暗号処理を行うことができます。
鍵サイズを選択できる場合、多くが128bitか256bitのどちらかです。 256bitの場合だと今後実用化されると考えられる量子コンピュータでの攻撃に耐性があると考えられています。 しかし、128bitで十分であるという意見もあり、実際に量子コンピュータが登場しないとわからない状態です。
モダンな方式としては256bitを選択すれば良いと思いますが、鍵サイズを限界まで小さくしたい、ラウンド数を減らして負荷を小さくしたいという方は128bitを選択しましょう。
ChaCha20
共通鍵暗号でも上記2つはブロック暗号と呼ばれる、データを分割して処理する方式でした。 ChaCha20はストリーム暗号と呼ばれ、逐次的にデータを処理することが可能となっています。
最近ではTLSで採用され、AESの変わりにChaCha20-Poly1305というメッセージ認証コードと組み合わせて利用されます。
ChaChaは軽量な命令で構成されているため、AES-NI命令が存在しないCPUを搭載したシステムでの用途に向いています。 Armv8等のSoCを搭載した最近のスマートフォン等ではAES-NIと同等の機能が利用できることも多いですが、IoT機器などの最低限度のCPUを搭載した機器ではChaCha20のほうが良い場合があります。
以前に高位合成でFPGA実装を行いましたが、本当に簡単な処理ばかりで実装できます。 github
まとめと今後
2000年以前に利用されていたDESは鍵サイズから危険であり、現実的な時間で攻撃が可能となっています。
共通鍵暗号はAESで煮詰まった感があり、これを選んでおけば大丈夫だろ的な風潮があります。
AES-NIが利用できない環境ではChaCha20が良いと記述しましたが、最近は軽量暗号という方式が提案され、NISTでコンペティションが開催されています。
2023年2月にASCONという認証付き軽量暗号が採択されました。
サーバ等の設定で活用できるところは非常に少ないですが、今後の動向に注目しています。
次回以降は、 公開鍵暗号、ハッシュ関数、乱数生成、鍵導出関数 などについて書こうと思います。