内容へ移動
Cat Paw Software
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
aes
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
<markdown> # AES * 共通鍵暗号の1つ * NISTで標準化されているアルゴリズムの1つ * 現在暗号と言ったら、ほぼこれが使用されている * TLS1.3の暗号アルゴリズムは、AESとchacha20しかない * wifiの通信暗号化もAES * 暗号化zipもAES * gpgではデータそのものはAESで暗号化している。公開鍵はAESの鍵を暗号化している。 ## 鍵導出関数 AESに限った話ではないが、現代の共通鍵暗号ではパスワードをそのまま暗号鍵にしているわけではない。人の考えたパスワードは暗号鍵としては脆弱なので、パスワードが漏洩しなくても暗号データの解析から鍵を取得されてしまう恐れがある。よってパスワードから推測の難しいデータを導出して暗号鍵として使用する 以下のような鍵導出関数がある * bcrypt * argon2 * pbkdf2 ## 暗号利用モード - [暗号利用モード - Wikipedia](https://ja.wikipedia.org/wiki/%E6%9A%97%E5%8F%B7%E5%88%A9%E7%94%A8%E3%83%A2%E3%83%BC%E3%83%89) 鍵よりも長いメッセージを暗号化する方式のこと。代表的なものを挙げる * ECB (非推奨) * CBC * CTR * GCM ECBはブロック長ごとに同じ鍵でxorを取るというシンプルだが非常に脆弱な方式なので使用を避けるべき(ただし他の方式も初期化ベクトルを使い回すなどすると脆弱になるので注意) CBC、CTRは今日よく使われている方式 GCMは暗号化に加えてメッセージ認証(改ざん検知)機能も併せ持っている。TLS v1.3で利用できるAES暗号は全てGCMである ## コード例 Rubyでのコード例を示す。RubyはOpenSSLライブラリが添付されており、これを利用すると簡単にAES暗号が使える 暗号化 ```ruby # # usage: # ruby enc.rb plain_text password # require "openssl" require "base64" msg = ARGV[0] pass = ARGV[1] salt = OpenSSL::Random.random_bytes(8) aes = OpenSSL::Cipher.new("AES-256-GCM") aes.encrypt iv = OpenSSL::Random.random_bytes(aes.iv_len) aes.key = OpenSSL::PKCS5.pbkdf2_hmac_sha1(pass, salt, 2000, aes.key_len) aes.iv = iv # aes.auth_data = "secret" encrypted = "" encrypted << aes.update(msg) encrypted << aes.final puts [salt, iv, encrypted, aes.auth_tag].map { |d| Base64.urlsafe_encode64(d, padding: false) }.join(".") ``` 復号 ```ruby # # usage: # ruby dec.rb encrypted_text password # require "openssl" require "base64" data = ARGV[0] pass = ARGV[1] salt, iv, encrypted, auth_tag = data.split(".").map{ |d| Base64.urlsafe_decode64(d) } aes = OpenSSL::Cipher.new("AES-256-GCM") aes.decrypt aes.key = OpenSSL::PKCS5.pbkdf2_hmac_sha1(pass, salt, 2000, aes.key_len) aes.iv = iv aes.auth_tag = auth_tag # aes.auth_data = "secret" decrypted = "" decrypted << aes.update(encrypted) decrypted << aes.final puts decrypted ``` auth_tag, auth_dataはAES-256-GCM、AES-128-GCMアルゴリズムで使用するメッセージ認証(データ改竄の検出)を行うためのデータ。auth_dataはオプショナルなので未指定でも可。これらはメッセージ認証機能のないAES-256-CBCなどを選択した場合は設定できない。 </markdown>
aes.txt
· 最終更新: 2022/08/31 09:46 by
nullpon
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ