PC・モバイルのトラブル
Base64は暗号化ではない:実際に何をするのか
Base64はエンコードであり、暗号化ではない。パスワードを隠せない理由、サイズが増える理由、デコードの仕方。
Base64はエンコードであり、暗号化ではない。バイナリを、テキスト向きのシステムが保存・送信できる文字に変える。
Base64テキストを持っていれば、通常は誰でもデコードできる。パスワードも秘密鍵も不要。
パスワード、APIキー、アクセストークン、私信などの秘密を守るためにBase64を使わないこと。表現の道具であり、セキュリティ機構ではない。
文字列が読めなく見えても、暗号化されているとは限らない。Base64はバイトの書き方をテキストに変えるだけだ。
Base64は実際に何をするのか
Base64はバイナリを限られたASCII(A–Z、a–z、0–9、+、/)でエンコードする。出力長を4の倍数にするため、= によるパディングが付くことがある。パディングは必須ではない。短い入力では = が1つまたは2つ付き、省略する形式もある。
Hello
Hello
Base64
SGVsbG8=
SGVsbG8= をデコードすると再び Hello になる。この往復に鍵は要らない。
- 元のデータ
- Hello
- Base64エンコード
- SGVsbG8=
- Base64デコード
- Hello
Base64と暗号化の違いは何か
Base64は表現と互換性のためのもの。内容は隠さない。暗号化は機密性のためのもので、暗号鍵材料を使う。Base64のデコードは復号ではない。公開鍵方式も鍵を使う。「あらゆる暗号化に一つの共有秘密」ではなく、「適切な暗号鍵」と言う。ハッシュは第三の考えで、可逆エンコードではないダイジェスト。
- エンコード
- 秘密鍵なし
- 誰でも可逆
- 暗号化
- 暗号による保護
- 復号には正しい鍵が必要
三つの別の仕事:
| 方式 | 主な目的 | 秘密の要否 |
|---|---|---|
| Base64 | データをテキストとしてエンコード | 不要 |
| 暗号化 | 機密性を守る | 要 / 鍵材料 |
| ハッシュ | 一方向のダイジェスト | 復号なし |
Base64は安全か
Base64単体では機密性を与えない。不透明に見えても、それはセキュリティ機能ではない。通常のデコーダでバイトが戻る。だからといって「Base64は不安全な技術」ではない。普通のエンコードであり、セキュリティ機構ではない。安全は周囲のシステムと制御に依る。
パスワードやAPIキーをBase64で隠せるか
保護としては不可。パスワード、APIキー、アクセストークン、私的データをBase64にしても守られない。符号化文字列を得た人は通常デコードできる。機密が要るなら本物の秘密保管と暗号化を使う。
暗号化でないのにBase64はなぜ使われるのか
テキスト前提のシステムは生のバイナリを運べないことが多い。Base64はテキスト形式でのバイナリ表現、小さなバイナリの埋め込み、テキスト専用経路でのバイト転送、Data URLの構築、一部のメール/MIME、スキーマがBase64を求めるAPIペイロードに使われる。APIがBase64を使うのは「セキュリティのため」ではなく互換性のため。
なぜBase64はデータが大きくなるのか
標準のパディング付きBase64は入力3バイトを4文字にする。長さは 4 × ceil(n / 3)(nは入力バイト数)。3バイトは4文字、6バイトは8文字。大きな生ペイロードではおよそ33%、約3分の1増える。小さな入力はパディングで見え方が変わる。1バイトは QQ==(4文字)。JSONの引用符、Data URL接頭辞、圧縮、追加の転送符号化で保存・送信サイズはさらに変わる。Base64は圧縮しない。
Base64URLとは何か
Base64URLは同じエンコードの、URLとファイル名向けの変種であり、暗号化ではない。+ は - に、/ は _ になり、パディングはしばしば省略される。Base64エンコード・デコード は標準Base64とBase64URLの両方をエンコード・デコードできる。パディング規則は仕様による。このツールはJWTデコーダではない。
画像やファイルをBase64にできるか
できる。画像、PDF、その他のバイナリをBase64テキストにできる。Base64はそれらを圧縮しない。符号化テキストは生バイトより大きいのが普通。
Base64のData URLとは何か
Data URLはメディア種別、符号化の印、符号化バイトを一つの文字列にまとめられる:
data:image/png;base64,...
小さな資産には便利。大きなファイルをData URLに入れるのは常に良いとは限らない。文字列が伸び、ページが遅くなることがある。既定ではなくトレードオフとして扱う。
エンコード、暗号化、ハッシュ
エンコード(Base64を含む)は表現のためで、秘密なしに可逆。暗号化は機密性のためで、暗号鍵材料を伴う。ハッシュは一般に一方向として設計されたダイジェストを出す。出力長はアルゴリズム次第で、SHA-256とSHA-512は同じサイズではない。ハッシュ生成 はそのダイジェストを見せられるが、暗号化もBase64の代わりのエンコードもしない。
よくあるBase64の誤り
Base64を暗号化だと思う
バイトのテキスト上の見え方を変えるだけ。
秘密を素のBase64で保存する
持っている人なら符号化値をデコードできる。
Base64が圧縮すると考える
しない。テキスト形は通常より大きい。
サイズ増を忘れる
大きな生ペイロードではおよそ3分の1増を見込む。
Base64とBase64URLを混同する
字母が違う。デコーダは誤った変種を拒否することがある。
誤った文字符号化でデコードする
Base64はバイトを戻す。テキストには一致する符号化、通常はUTF-8がまだ要る。
= が常にあると思う
パディングは必要なときだけ。無い文字列もある。
UnicodeテキストがBase64で問題になる理由
Base64は文字ではなくバイトに働く。テキストは先にバイト化する。通常はUTF-8。韓国語、日本語、アラビア語、絵文字にはその段階が要る。ブラウザの btoa() はUnicode文字列で失敗しうる。Base64エンコード・デコード はUTF-8バイトをエンコードするので、そのテキストは往復できる。誤った文字集合でデコードすると、Base64は正しくても文字が崩れて見える。
Base64は機密性を与えない。符号化値を持つ人は通常デコードできる。乱れた見た目のテキストを守られた秘密と思わないこと。
ブラウザでBase64をエンコードまたはデコード
NEXNARA Base64エンコード・デコード はUTF-8テキストとファイルをローカルで変換する。
標準Base64とBase64URLのエンコード・デコード、ファイルから生Base64またはData URL、Base64やData URLからダウンロードに戻せる。無効入力は落ちずに拒否される。空白は無視され、足りないパディングは補われる。
10 MB超のファイルはタブが遅くなることがある。32 MB超はブラウザでは処理しない。
Base64処理自体はブラウザ内で行う。このツールではテキストやファイルをNEXNARAサーバーに送らない。広告や他のサイト機能はネットワークを使う。処理とは別。
Base64のエンコードやデコードが必要なら、Base64エンコード・デコード を開いてテキストを貼るかファイルを落とす。
FAQ
Base64は暗号化か
違う。Base64はエンコード。表現を変える。機密性は守らない。
Base64は安全か
Base64はセキュリティ機構ではない。普通のエンコード。テキストを持つ人は通常デコードできる。安全は残りのシステムに依る。
パスワードなしでBase64はデコードできるか
できる。標準デコーダで足りる。Base64自体にパスワードも秘密鍵も要らない。
なぜBase64はファイルサイズが増えるのか
標準のパディング付きBase64では3バイトが4文字になる(長さ 4 × ceil(n / 3))。大きな生ペイロードではおよそ33%増。ごく小さい入力ではパディングで比率が変わる。
Base64とBase64URLの違いは何か
Base64URLは + と / の代わりに - と _ を使い、= パディングをしばしば落とす。どちらもエンコード。Base64エンコード・デコード は両方の字母に対応する。
画像やファイルをBase64にできるか
できる。結果はテキストであり、より小さいファイルではない。生Base64やData URLには Base64エンコード・デコード のファイルモードを使う。ファイルはブラウザ内に留まる。