Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ハンズオン課題: CLI暗号化ツールの拡張

この章で作成した rcli ツールはかなり基本的なものです。 これは意図的なもので、Rustの機能とツール群を簡単に紹介するためのものでした。

最初の課題の目標は、このCLI暗号化ツールを拡張することです。 読者の中には、Rust言語をより体系的な形で紹介する次の章を終えてから、この課題に取り組みたいと思う人もいるかもしれません。 一方で、今すぐコードを書きたくて、進めながらRustをさらに学ぶことをいとわない人もいるでしょう。

以下に、このツールを拡張するための提案をいくつか示します。 1つ以上を選んで構いません。 もちろん、独自のアイデアを実装しても構いません!

コア暗号技術

  • 暗号化アルゴリズムを、私たちのRC4実装から、自分で選んだ現代的なAEAD暗号に切り替えてください。選択するには、さまざまな暗号の長所と短所について調査する必要があります。

    • RustCrypto organizationはいくつかのAEADアルゴリズム実装を保守しています1が、他にも適した成熟したライブラリが見つかるかもしれません。

    • ハードウェア製品の脅威モデルには、デバイスに24時間365日物理的にアクセスできる攻撃者が含まれる場合があります。タイミングおよび電力サイドチャネル耐性について保証を提供するアルゴリズムと実装を見つけられますか?2

CLI UX

  • ユーザーが既存のファイルを上書きする代わりに、新しい暗号化ファイルを作成できる機能を追加してください。ユーザーが既存のファイルを上書きすることを選んだ場合は、色分けされた警告を表示してください(ターミナル出力に色を付けるためのサードパーティライブラリを選ぶ必要があります)。

  • ディレクトリ内のすべてのファイルを再帰的に暗号化する機能を追加してください(これをテストするときは十分に注意してください。ダミーファイルを含む新しいディレクトリを作成したくなるはずです!)。

  • コンソールに Processed {file_name} と出力する代わりに、Encrypted {file_name} または Decrypted {file_name} のいずれかを出力するようにツールを更新してください(ヒント: 暗号化されたバイトストリームを識別するためにテストできるヒューリスティックはありますか?)。

  • バッファリングを使って、一度にメモリへ読み込むには大きすぎるファイルの暗号化をサポートしてください。

CLI統合テスト

  • CLIバイナリを実行し、コマンドライン引数と暗号化または復号する一時ファイルの両方を提供する統合テストを追加してください。テストハーネスをセットアップするには、1つ以上のサードパーティライブラリを使いたくなるでしょう。

  • 無効な入力が適切に処理されることを確認するネガティブテストは、セキュリティテストの重要な一部です。統合ハーネスがそのようなケースを明示的にチェックするようにしてください。



  1. RustCrypto: Authenticated Encryption with Associated Data (AEAD) Algorithms。RustCrypto organization(2022年アクセス)。

  2. サイドチャネル攻撃は、物理システムによって漏えいした情報(タイミング、消費電力、電磁放射、音響放射など)を利用して、セキュリティを侵害します。暗号技術の文脈では、これはしばしば間接的な手段で秘密鍵素材を抽出することを意味します(ソフトウェアのバグは悪用されません!)。一部の暗号アルゴリズムは、この脅威モデルを念頭に置いて設計されています。それらの操作は、外部から観測可能なばらつきを減らすよう慎重に構成されており、サイドチャネル攻撃を著しく困難にするか、完全に非現実的なものにします。