[5] [DFN[Base64]] は、[[オクテット列]]を64種類の[[英数字]]などに転写する[[符号化方式]]の一種です。 (一般に [Q[base 64]] は[Q[64進数]]を意味します。特に大文字で [Q[Base64]] と書いた場合や、インターネットで言われる場合には、 [[MIME]] の Base64 を指します。) * 符号化方式 [27] オクテット値3つ (8ビット×3 = 24ビット) を4文字 (6ビット×4) で表現します。ですからデータ量は3分の4倍、33%増加になります。 64文字 (と、特殊用途に使われる [CODE(char)[=]]) は、 [[ISO/IEC 646の版]]で全て共通に存在し、しかも [[EBCDIC]] の全ての版で使える文字から選ばれたそうです。 [PRE[ Value Encoding Value Encoding Value Encoding Value Encoding 0 A 17 R 34 i 51 z 1 B 18 S 35 j 52 0 2 C 19 T 36 k 53 1 3 D 20 U 37 l 54 2 4 E 21 V 38 m 55 3 5 F 22 W 39 n 56 4 6 G 23 X 40 o 57 5 7 H 24 Y 41 p 58 6 8 I 25 Z 42 q 59 7 9 J 26 a 43 r 60 8 10 K 27 b 44 s 61 9 11 L 28 c 45 t 62 + 12 M 29 d 46 u 63 / 13 N 30 e 47 v 14 O 31 f 48 w (pad) = 15 P 32 g 49 x 16 Q 33 h 50 y ]PRE] [28] Base64 は6ビット単位になりますが、オクテット列の長さと必ずしも 一致する (6と8の公倍数の長さになる) とは限らないので、 [CODE(char)[=]] で埋めて調節します。この結果、 Base64 data は必ず 4の整数倍の長さになります。 [24] Base64'ed data は、 一行辺り76文字以下でなければなりません。 ([[電子メイル]]/[[MIME]] の制限に由来。) 区切りの改行文字列 [CODE(char)[CRLF]] は、復号の時には無視されます。 (これ以外でも、上の表に無い文字が現れたら、無視して処理を続けます。) [36] +++++ ([[名無しさん]] [WEAK[2005-04-06 17:08:30 +00:00]]) [38] [PRE[ ]PRE] ([[名無しさん]] [WEAK[2005-05-04 14:14:32 +00:00]]) [40] iVBORw0KGgoAAAANSUhEUgAAAHgAAABcCAMAAACSh4HAAAADAFBMVEVDOCLRr7Syj27q28Li0rWc eVXFrJjh3t7eyrKJaUiff2+xmo7brqDi0sPh3Nnr39/Xw7Lf49/m3s/fy7egg2LGsad6XDu1lnaK c1/Sh5/i0r6ljXHcvajd0c3r29vs6OPr5+Pjy67r1bTm3svbw7Lm5uPr49vexrbo0sbTrZnbtaqR ck6YfGdtUTS/oo6cgml7ZFK2kHS+nX+him/r38+kjHnNqJTXsaSOd2Xr39Pbvqbizr7p1szo0L7r 49fr5tvr59/jy7Lr4+Xnz7rv4d7r49/n18Pr28Djx67hs7Tn3teIa1SnhmPr28vfwLjPrpPbtqTr 38u0mITVsZ6bel2QemB+YUfTnZDe0tPgt6pjTTa9n4xvWkW/pZWwj36bhnCge2TGhoN+alujiXWl jn3TsKKujnLr29PbxcLHm4bXuqTbvq6MclnMqZvr48/jy7aoh2rdxayQemzn4d7n077myb/jz7rn 17rv3s7jw7LnyrXn18fjx7Lp1tbjvq7n28Pn08Pfw7Ln29Pnz7br28/m5+Xbuqqqim/v49bn28/X tqfn07bj28fn28eqjnTr59efhmjVspvfzMbr6+iihWvn49uSdWDn28vXurK5mXvevrSMaknr38fg raGskHmBYkLHpI+efVfMr57QsaWObVG/mI7r17rjw6zPrZ6ggnDn59/jxrbUoJjh1dhgSi7Ql5ff vqrn083r39uPclRvWDq3lH7duKNhUURxYVSwln+ggmGxjXXr07qcf2KCbFWmim2ggF/Jk4aBb2TA noa3oJekhnLv3sqBZ0nv3tXHpIjbpZvn18vYo5XIqJjfy77fw66UfmemhmiUg3PTuKbkxb3n07rr 177n38e2nISnkofjuq6Vdlfjz7Lny7rj1cWUfGLr28fXtqDfvq7r39fiyKvjy7rjz7bnzLLfw6rn 177r18fr18Pfz7rbuqauknKtjWvj07rn59vm4tbfx7Li1r6minHny8jPr5rdx6vn48+eh23n4dXr 49OggWXXu6zn39MSu2pNAAAAEHRFWHRUaXRsZQBnb21hMDQucG5nLEULGQAAAAx0RVh0U29mdHdh cmUAVmlYrCJubQAAIABJREFUeJxNmgs823n297UzVYquf1KXTXVqnpKUIi4RInXJ5i9raFDX1i2t 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 FpYnLAoai+VQrz59mvPZS7AloYaPDbVd1ApUtxkYvQVYHCOfYzVTn14Xu+DYGRMT4+gIXHcoLZaI eIxINHexu5Fmd+Tyb3854DIXFzs6IoY7o96D29xDosmNM6kTmwTCKhaH4/JwsDfgeKvUVepTztPc nM/a2y8GXzSEA7m3tS1D8RLgC9FvS+vSY6e7o2K6Yhz7+twhtywWK0GkJLq4h++4m6cdifuV+5XO YhiAA2IiOqN03p8uVzAF22oLKwTmwUaE8+ThPDcAT6XyeHrvKr0lx+85HNCKkj0r+Eosjkpgz5hA vF1t78CQacRlgc8r30HR96UN3Wk98P588v8A8BQC4yOvrDMAAAAASUVORK5CYIL6eLv/8a35GPXW uJq+hOvS+5Tk/62c8IHu2vYuu2KszsX4yeba/Z+1zvvcnsPuIjxfdQpuY1VIhbiLtN6OwBzJvPjP pfyz6qiL+9vplKmwpa6rLOrRs/mh9rbj6dXkqa+iiqKV6tzlga2cQQsSUF83YGJ2IDYuNC04dHl8 fXF4KpXVg8uFn46By52D3NK2ou/urKPtkZ+H3tXNioCM2dnL6Y+E0Kyn4uD84Oed5eL7uNrPjYnu 9ez1qO/gtrC9rqSylZKBmJCEztPZl5mUlJOLzNrSh76r6e2CmYCZzIiE0uzh8vjitLOjsbXc6ff9 s72oqK+36P72o5KHxcGmvaS9EFVYDggFFhx5WyhPV1lJfQsBTkZMT0xSBBYZRz0gVTdbQxkTUl9a W14KBwZECFcXAhkLWwpHBBpXKBgcSykrKS83by4wTQMdHkZLT8v7jMzH6NCgje3T+96Bw7T/mq9m /zv25bttsYHy3b2WtqDnuL2EtIyloOWdDBE0SA0jOANxcykuKTUgLjU4BRcRCA0wCFE7tVqLCB18 AAAA ([[名無しさん]] [WEAK[2006-01-14 11:59:21 +00:00]]) [[#comment]] * 仕様 [25] Base64 は、最初 [[PEM]] ([[RFC 1421]] ) で規定されましたが、後に [[MIME]] ([[RFC 1341]] , [[RFC 1521]] , [[RFC 2045]] ) で採用され、広く普及するに至りました。 [15] その後、 Base64 を規定する新しい RFC, [[RFC 3548]] がでました。 [6] PEM 以来の Base64 の定義を採用する仕様: - [[PEM]] 署名 - [[MIME]] [CODE(MIME)[Base64]] [[転送符号化]] - [CODE(MIME)[[[x-gzip64]]]] 転送符号化 - [[PGP/MIME]] 署名 - MIME [CODE(MIME)[[[Content-MD5]]:]] 欄 - [[822]] [CODE(822)[[[Face]]:]] 欄 - MIME [CODE(ABNF)[[[encoded-word]]]] [CODE(MIME)[B]] 符号化 - [CODE(URI)[[[data]]:]] [[URI]] [[scheme]] - [[uuencode]] 風表現 >>3 - [32] [CODE(ABNF)[[[instance-digest]]]] ([CODE(ABNF)[[[digest-algorithm]]]] が [CODE(HTTP)[[[SHA]]]] または [CODE(HTTP)[[[MD5]]]] の時) [33] [[RFC 3548]] の MIME 型 Base64 の定義を採用する仕様: - [[RFC 3548]] の MIME 型 Base64 - [[XMPP]] ([[RFC 3920]]) [30] よく参照される MIME の Base64 の定義には76文字制限がありますが、 この制限を撤廃した仕様も多くあります。 MIME の Base64 の定義から行長制限を撤廃したもの: - [[XML Schema]] のデータ型 [CODE(XML)[[[base64Binary]]]] [[#comment]] * uuencode 風表現 [3] [[MIME]] 以外の場面でファイルを貼り付けるのに、 [[uuencode]] みたいな書き方をすることがあるみたい。 例1: [PRE(example)[ begin-base64 644 base64ed.data [INS[... base64 stream ...]] ==== ]PRE] [26] 例2: [PRE(example)[ begin-base64 644 code.tgz [INS[... base64 stream ...]] = ]PRE] [[#comment]] * 変種 [23] MIME Base64 と似ながら少しずつ異なる変種がいろいろ知られています。 [31] '''主要なチェック点''': :字母:MIME の字母65文字と出入りはないか? :詰め:詰め文字は必須か、省略可能か、禁止か? :改行:行長制限はあるか? あるなら何文字 (以内 / 丁度) か? :空白:空白・改行の混入を認めているか? :誤り処理:字母以外の文字の混入時の処理は? 字母数が4の倍数でない時の処理は? ** 詰め文字の省略 [1] データ長がある程度決まっている場合は、 [CODE(char)[=]] padding が無駄であることがあります。この場合で、 [CODE(char)[=]] padding を省略すると規定しているものがあります。 [2] 必ず[[8ビット・バイト]]を使用するものは、 [CODE(char)[=]] padding の代わりに、元のデータの後に任意個の [CODE[0x00]] が並んでいる としても解釈上影響がないことがあります。そういうものがあります。 - [[UTF-7]] の Base64 は、必ず16ビット単位のデータを扱うので、 最後の詰め文字を省略すると規定されています。 - [29][[Norton AntiSpam]] は [CODE(ABNF)[[[encoded-word]]]] の最後の [CODE(MIME)[=]] を省くそうです。 [SRC[mew-dist 25264]] もちろんこの実装は MIME 違反です。 [39] 機械的に電子メイルを生成する類のプログラムで、 末尾に4つも [CODE(MIME)@en[=]] を付けるとんでもない符号化するものがあるそうです。 [WEAK[(しかも改善するように要求したら使っている [[MUA]] が悪いのだろうと言われたとか。。。)]] ([[名無しさん]] [sage] [WEAK[2005-12-10 07:32:30 +00:00]]) [[#comment]] ** 斜線の代替文字 [22] MIME の Base64 字母には [CODE(char)[/]] が含まれますが、 色々なシステムで階層の区切り文字として使われているので、 あまり嬉しくないことがあります。 [7] [[IMAP]] の修正 [[UTF-7]] では、 >>2 の修正に加えて、 [CODE(char)[/]] の代わりに [CODE(char)[,]] が使われています。 仕様書: - [[RFC 3501]] [CITE[INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1]] -- [CSECTION[5.1.3]] - [CITE[RFC ERRATA]] -- 明確化のための修正が行われています。 [9] [CODE(URI)[[[urn:urn-5]]]] [[URN]] [[名前空間]]で使っている Base64 変種は、 [CODE(char)[/]] の代わりに [CODE(char)[-]] を使います。 (URN では [CODE(URI)[/]] が使えないため。) また、詰め文字は使いません。 (''Namespace ID: urn-5'' ) [16] [[RFC 3548]] 曰く、 MIME Base64 ではファイル名や [[URI]] で安全ではないので、 [CODE(char)[/]] の代わりに [CODE(char)[~]] を使う提案があったそうです。しかし [CODE(char)[~]] もやはりファイル・システムや URI で安全とは言えません。 [17] そこで RFC 3548 はファイル名や URI で安全な代替 Base64 字母として、 [CODE(char)[+]] と [CODE(char)[/]] に代えて [CODE(char)[-]] と [CODE(char)[_]] を使うものを規定しています。それでも [CODE(char)[=]] が padding に使われてるので、まだ完全に URI で安全とは言えません。 [CODE(char)[-]] が先頭に来る可能性があるので [[Un|x]] で安全でない虞もあります。 [18] [[M$XML]] は [CODE(char)[/]] の代わりに [CODE(char)[*]] を使っていたそうです。最近の版では両方認識するそうです。 [[#comment]] ** memo [14] 変種ではありませんが、 [[MIME]] の [CODE(MIME)[[[application/octet-stream]]]] では、[[オクテット]] (8[[ビット]]) 単位でないビット列も扱うことが出来ます。 そのような場合には全体長が8の倍数になるようにビット [CODE[0]] を詰め、 詰めた数を引数でメモっておきます。 [[#comment]] * 実装 [4] [[Perl]] なら、 [CODE(perl)[[[MIME::Base64]]]] を使うのが気楽かと。 Perl 5.7.3 以降では標準で入っています。 但し、 >>1,>>2,>>7 のような変種には対応していません。 [8] [[uuencode]] も64進数であることを利用して、 uuencode で符号化した後に [CODE[[[tr]]]] を使うという方法が使われることもあります。 [[#comment]] * 安全性に関して [34] '''秘密情報送信のための使用''': [[HTTP]] の[[認証]]や [[SASL]] などでは、[[合言葉]]などの繊細な情報を送信するために Base64 を使うことがあります。 Base64 は[[転送符号化]]であって[[暗号化]]では''ありません''が、 第3者 [WEAK[(例えばシステムの管理者)]] が繊細な情報を含むメッセージを見てしまったとしても読むことができません [WEAK[(流石に脳内で Base64 を復号できる猛者はいないでしょう)]]。 もちろん、悪意のある人は計算機を使って復号してしまうでしょうから、 それに対する効果はありません。 [35] '''バッファ溢れ攻撃''': 不正な (字母に含まれない) 文字や末尾以外にある詰めの [CODE(char)[=]] への対処がいい加減だと、バッファ溢れ攻撃に使われることがあり得ます。 [SRC[[[RFC 3920]] 14.9 など]] [[#comment]] * メモ [12] [[インターネット]]でのオクテット列の文字列転写法の[[デ・ファクト標準]]です。 [10] [[XML]] でバイナリを扱う時には Base64 を使うのが推奨されている (誰に?) そうです。 ([Q[XML は人間可読である]]のじゃなかったのか? って気もするが。) [11] >>10 実際のところ、 [[ISO/IEC 6479]] の[[制御シーケンス]]とかが混じったデータを使いたいという要求はある。 (それは XML の思想に反するという反発は強く、 XML 1.1 でも結局駄目になったけど。) [21] >>11 [[XML 1.1]] では結局[[文字参照]]なら OK ([CODE(char)[[[U+0000]]]] 以外。) になりましたね。 [13] >>11 でも、せめて [CODE(char)[[ABBR[[[FF]]] [FORM FEED]]]] くらい使いたい気はする。 (実質 [[Un*x]] でしか使えない環境依存だから入れたくないのかもしれんが。) [37] [[XML]] [[デジタル署名]]系仕様では [[Base64]] を使うことを識別するために [CODE(URI)[[[http://www.w3.org/2000/09/xmldsig#base64]]]] という [[URI参照]]を使っています。 ([[名無しさん]] [sage])