【ITニュース解説】Python: How to Encrypt and Decrypt with AES
2025年09月23日に「Dev.to」が公開したITニュース「Python: How to Encrypt and Decrypt with AES」について初心者にもわかりやすく解説しています。
ITニュース概要
AESは、パスワードなど秘密にしたいデータをPythonで安全に暗号化・復号化する技術だ。`cryptography`ライブラリを使えば、同じ秘密鍵で処理する共通鍵暗号方式のAES-GCMを簡単に実装できる。データを守る強力な手段だが、鍵の適切な管理が不可欠となる。
ITニュース解説
データ保護は、パスワードや個人情報、プライベートなメッセージなど、誰にも知られたくない大切な情報を守るために非常に重要だ。この目的のために広く使われている強力な技術の一つに、AES(Advanced Encryption Standard)と呼ばれる暗号化標準がある。AESは、通常の読める状態のテキストを、第三者が見ても意味をなさない「暗号文」に変える(これを暗号化という)仕組みを提供する。そして、必要になったときに、その暗号文を元の読めるテキストに戻す(これを復号化という)ことも可能にする。この暗号化と復号化の両方に、同じ「秘密の鍵」を使うのがAESの大きな特徴であり、「対称鍵アルゴリズム」と呼ばれる理由だ。
実際にAESを使った暗号化をPythonで実現するには、いくつかの準備が必要となる。まず、Python 3.7以降のバージョンがコンピューターにインストールされていることが前提だ。次に、「cryptography」というPythonのライブラリをインストールする必要がある。これは「pip install cryptography」というコマンドをターミナルで実行するだけで簡単に導入でき、Pythonで高度な暗号技術を扱うための便利な機能が詰まっている。
AESの仕組みをさらに詳しく見てみよう。AESは「鍵長」というものでセキュリティの強度が決まる。一般的に128ビット、192ビット、そして最も強力な256ビットの鍵長がサポートされており、ビット数が多いほど解読が困難になるため、より安全性が高まる。この説明で示すコード例では、最も強固な256ビットの鍵を使用する。また、AESには「動作モード」という、暗号化処理の具体的な進め方を決める方式がいくつか存在する。たとえば、「ECB(Electronic Codebook)」モードはシンプルだが、特定のパターンを持つデータに対しては安全性が低いとされている。「CBC(Cipher Block Chaining)」モードはECBよりも安全だが、データの完全性(途中で改ざんされていないか)を確認するには追加の仕組みが必要になる。現代的で推奨されるのが「GCM(Galois/Counter Mode)」モードだ。このモードは高い安全性を提供し、さらにデータが途中で改ざんされていないかをチェックする機能も内蔵しているため、暗号化だけでなくデータの信頼性も保証できる。このため、今回のコード例でもGCMモードを利用する。
PythonでAES-GCM暗号化を実装する具体的なコードは次のようになる。まず、random、string、base64といった標準ライブラリと、インストールしたcryptographyライブラリの中からAESGCMクラスをインポートする。
暗号化を行うencrypt_with_aes関数は、元のメッセージ、秘密の鍵、そしてNonce(ノンス)という三つの情報を受け取る。ここでいうNonceは、Initialization Vector(初期化ベクトル、略してIV)とも呼ばれるもので、暗号化のたびに異なるランダムな値を使うことで、同じ鍵とメッセージであっても毎回異なる暗号文が生成されるようにし、セキュリティを高める役割を果たす。関数の中では、まず鍵、Nonce、元のメッセージをコンピューターが処理できるバイト列に変換する。次に、AESGCMオブジェクトを作成し、そのencryptメソッドを使ってメッセージを暗号化する。暗号化されたデータはバイト列なので、人間が読めるテキストとして扱えるように「Base64エンコード」という方法で文字列に変換してから返す。
一方、復号化を行うdecrypt_with_aes関数は、暗号化されたBase64文字列、秘密の鍵、Nonceを受け取る。まずBase64文字列を元のバイト列に戻し、AESGCMオブジェクトのdecryptメソッドを使って復号化する。復号化されたバイト列を、元のテキスト形式に戻して結果を返す。
このコードには、毎回異なるNonceを生成するためのgenerate_iv_string関数も含まれている。これはランダムな文字列を生成するシンプルな関数で、セキュリティ上極めて重要なNonceのユニーク性を保つために利用される。
実際にこのコードを実行すると、まず「This is a top secret message」という入力メッセージが、例えば「I1M8nE7HxHlmv7uKZPM/FsorN4hIiNhAm8fg2TavM75Dxp00zFrgRQem67E=」のような意味不明な暗号文に変換されて出力される。そして、その暗号文を復号化すると、再び元の「This is a top secret message」というメッセージが正確に復元されることが確認できる。
このような暗号化システムを安全に運用するためには、いくつかの重要な注意点がある。最も重要なのは「秘密の鍵」を厳重に管理することだ。コードの中に直接鍵を書き込んでしまうと、コードが公開されたり、不正にアクセスされたりした場合に鍵が漏洩する危険性がある。実際のシステムでは、鍵は環境変数に保存したり、専用の鍵管理システム(シークレットマネージャーやセキュアなストレージ)に保管したりすることが強く推奨される。また、暗号化のたびに生成する「Nonce」は、決して再利用してはならない。同じ鍵とNonceの組み合わせでデータを複数回暗号化すると、攻撃者が暗号化のパターンを解析しやすくなり、セキュリティが著しく低下する可能性があるためだ。さらに、長期的にデータを保護するプロジェクトでは、一定期間ごとに「鍵をローテーションする」、つまり新しい鍵に定期的に変更する運用を取り入れることで、万が一鍵が漏洩した場合のリスクを低減できる。
結論として、AES-GCMはデータを安全に保つための非常に強力で信頼性の高い暗号化方式である。Pythonを使えば、わずかなコードでメッセージを安全に隠し、必要に応じて元のメッセージを取り出すことが可能となる。より深く暗号技術を学びたい場合は、使用しているcryptographyライブラリの公式ドキュメントを参照することが有効だ。