ChaCha20暗号化・復号ツール
ChaCha20-Poly1305またはChaCha20単体で、テキストを暗号化・復号します。
復号するときにも必要です。入力した内容がこのページの外に出ることはありません。
OpenSSLの既定値は10,000です。任意の回数を指定でき、多いほどパスワードの推測に時間がかかるようになります。復号には同じ回数が必要です。
認証付き:パスワードや鍵の誤り、テキストの改ざんを検出します。
OpenSSLのencコマンドはChaCha20-Poly1305を読めません。このページか、暗号ライブラリを使うコードで復号してください。16バイトのタグは暗号文のあとに続きます。
ChaCha20-Poly1305(RFC 8439)は、TLS 1.3やWireGuardで使われている認証付き暗号です。テキストを暗号化するだけでなく、改ざんやパスワードの誤りも検出します。ここではパスワード、または任意の256ビット鍵と12バイトのnonceでテキストを暗号化でき、Base64やhexの暗号文を貼り付ければ復号もできます。パスワードを使う場合、鍵とnonceはopenssl enc -pbkdf2と同じくランダムなソルトを使ったPBKDF2-HMAC-SHA256で導出され、出力はSalted__、ソルト、暗号文、16バイトのPoly1305タグの順に並びます。タグのないChaCha20単体も、OpenSSLのchacha20と同じ形式で使えます。テキスト、パスワード、鍵が端末の外に出ることはありません。ブラウザ内で動作し、無料で登録も不要です。
ChaCha20-Poly1305でテキストを暗号化する方法
- 「暗号化」か「復号」を選びます。暗号化するテキストを入力するか、復号するBase64またはhexのテキストを貼り付けます。形式は自動で判別されます。
- パスワードを入力するか(「生成」で強力なパスワードを作れます)、「鍵とIV(hex)」に切り替えて、64桁の鍵と24桁のnonce(ChaCha20単体では32桁のIV)を入力または生成します。
- ChaCha20-Poly1305のままにするか、openssl enc -chacha20に合わせる場合はChaCha20を選びます。復号するときは、暗号化に使ったのと同じモード、パスワード、反復回数を指定します。
- 結果をコピーまたはダウンロードするか、「入れ替え」を押して結果を入力欄に移し、確認のためにもう一度復号します。
主な機能
- RFC 8439どおりのChaCha20-Poly1305:256ビット鍵、12バイトのnonce、16バイトのタグ
- OpenSSL形式のChaCha20単体:4バイトのリトルエンディアンのカウンターと12バイトのnonceからなる16バイトのIV
- パスワード方式:ランダムなソルトを使ったPBKDF2-HMAC-SHA256で鍵とnonceを導出し、openssl enc -pbkdf2のSalted__ヘッダーを付加
- 「鍵とIV」方式:hexの鍵とnonceを自分で指定するか、「生成」でランダムに作成
- Poly1305を使うと、パスワードや鍵の誤り、1文字の改ざんがあれば、でたらめな結果を返さずに復号が失敗
- パディングなし:暗号文はテキストと同じ長さ(Poly1305では16バイトのタグが加わる)
- ChaCha20単体用のopenssl enc -chacha20コマンドを表示
プライバシーは守られますか?
はい。ChaCha20はブラウザ内のWebAssemblyで動作し、パスワードのストレッチングはブラウザのWeb Cryptoで行われます。入力したテキスト、パスワード、鍵、nonceは、どれもアップロードや保存されません。
よくある質問
ChaCha20-Poly1305とChaCha20単体、どちらを使えばいいですか?
新しく使うなら、初期設定のChaCha20-Poly1305です。Poly1305タグがあるので、1文字でも改ざんされていたりパスワードが違っていたりすると復号が失敗します。ChaCha20単体は暗号化するだけで、鍵が違ってもエラーにならず読めないバイト列が返るため、openssl enc -chacha20のように単体を使うシステムに合わせる場合にだけ使ってください。
OpenSSLで復号できますか?
ChaCha20単体ならできます。パスワード方式では echo 'U2FsdGVkX1…' | openssl enc -d -chacha20 -pbkdf2 -iter 10000 -a -A を、「鍵とIV」方式では-pbkdf2 -iterの代わりに-K <鍵のhex> -iv <IVのhex>を使います。ChaCha20-Poly1305はできません。openssl encはAEAD暗号を受け付けないためです。このページかプログラムで読んでください。「鍵とIV」方式の出力は、ヘッダーなしで暗号文のあとに16バイトのタグが続く形式です。
nonceを使い回すとどうなりますか?
同じ鍵とnonceで暗号化した2つのメッセージからはテキスト同士のXORがわかってしまい、攻撃者がPoly1305タグを偽造できるようになります。パスワード方式ではこの失敗は起こりません。暗号化のたびに新しいランダムなソルトが選ばれ、鍵もnonceも出力も毎回新しくなるためです。「鍵とIV」方式では、メッセージごとに「生成」を押して新しいnonceを作ってください。
ChaCha20はAESと同じくらい安全ですか?
はい。ChaCha20-Poly1305とAES-GCMはどちらもTLS 1.3の標準暗号で、実用的な攻撃方法はありません。AES用のハードウェアを持たないスマホでは、ChaCha20のほうが速いこともよくあります。弱点になるのはパスワードです。長くランダムなパスワードを使い、両側を管理できる場合は反復回数600,000の設定を使ってください。
XChaCha20-Poly1305に対応していますか?
いいえ。libsodiumにある24バイトのnonceを使うXChaCha20は別の構成なので、その暗号文はここでは復号できません。このページが扱うのは、RFC 8439の12バイトのnonceと、OpenSSLの16バイトのchacha20 IVです。テキストではなくファイルを暗号化したい場合は、age形式でChaCha20-Poly1305を使う「ファイル暗号化」をご利用ください。