[PR]今日のニュースは
「Infoseek モバイル」

初心者によるエンコーディングと文字セットメモ

あなたは、人目の訪問者です。


このページ以下に関する情報は、保証しません。
リンク


ASCII コード表



ファイル終端コード
MS-DOS 時代は、ファイル終端を示すコードとして、0x1a を使用している。
Windows のメモ帳などで見ると「^Z」とかって表示するゴミっす。



テキストの改行コード
UNIX
LF
Macintosh
CR
MS-Windows
CR+LF


CR=0x0D,LF=0x0A



BER
(Basic Encoding Rules)
SNMP で利用。

ISO8825-1 で定義されている。

基本的には、
byte 名称 意味
1 値の型 値はどういうデータタイプであるかを示す
1 値のデータサイズ 値のデータサイズを示す
n 値そのもの




BER の型の値
型の値(SNMP コマンド)
GET リクエスト 0xa0
GET NEXT リクエスト 0xa1
GET レスポンス 0xa2
SET リクエスト 0xa3
TRAP (SNMPv2 で廃止) 0xa4
GetBulk リクエスト(SNMPv2) 0xa5
Inform リクエスト(SNMPv2) 0xa6
SNMPv2 Trap(SNMPv2) 0xa7


型の値(その他)
整数 0x02
bit 単位の文字列 0x03
byte 単位のデータ(文字列) 0x04
NULL 値 0x05
オブジェクトID 0x06
値の組み合わせ 0x30
時間 0x32
IPアドレス 0x40
カウンタ (SNMPv2) 0x41
増減カウンタ (SNMPv2) 0x42
TimeTicks (時間?) 0x43
Opaque(不透明、不定) 0x44
NsapAddress 0x45
64bit カウンタ (SNMPv2) 0x46
unsigned 32bit 整数 (SNMPv2) 0x47
長さ情報が n バイト 0x80 以上
7bit の値が n
0xNN + 0x80
(0xnn = n)
長さ情報が 2 バイト 0x82




BER の構造体
大抵はこんな感じ
バイト値 意味
0x30 これから構造体だよ〜ん
0x82 長さ情報は 2 バイトだよ〜ん
0xab 長さは、0xabcd バイト
0xcd
..... ここにデータさ




ASN.1
(Abstract Syntax Notation One)
構造化記述の一つ。



ASN.1 と BER の違い
マイクロソフトへリンク(KB=KB252648)



DER
(Distinguished Encoding Rules)
BER のサブセット



CER
(Cannonical Encoding Rules)
ASN.1 のデータ構造のエンコード方式の一つ



XDR
(eXternal Data Representation)
Sun RPC で利用されているコーディング法

RFC1041 で定義されている。

サポートされるデータ型は、
  • 整数
  • 符合なし整数
  • ブール値
  • 浮動小数点
  • 固定長文字列
  • 可変長文字列
  • 構造型
  • etc




Base64
RFC1521,RFC1522 で定義されているかも。

SMTP(ESMTP) で利用

日本でのデフォルトエンコード法でしょう。

8bit 3つ(24bit) を、6bit 4つに分ける。

割り当てる ASCII キャラクタは、
6bit 値が、
0x00 の時 A で、0x01 の時 B で、....0x19 の時 Z で、0x1a の時 a で、0x1b の時 b で、....0x33 の時 z で、0x34 の時 0 で、0x35 の時 1 で、....0x3d の時 9 で、0x3e の時 + で、0x3f の時 / です。

バイトが足りない場合、ヌル(0x00)を一つパッドして入れられ計算される。
変換後は、4の倍数個にするためのパッドとして、"=(イコール)"がパッドとして利用される。
(変換後は、"A-Z,a-z,0-9,/" で、"=" はない)

例えば、i(0x69) の場合、i(0x69) + NULL(0x00) - > aQ
変換後は、4の倍数にするため aQ -> aQ==

ちなみに、
  • + の ASCII コードは、0x2B。
  • / の ASCII コードは、0x2F。
  • 0 の ASCII コードは、0x30。
  • 9 の ASCII コードは、0x39。
  • = の ASCII コードは、0x3D。
  • A の ASCII コードは、0x41。
  • Z の ASCII コードは、0x5A。
  • a の ASCII コードは、0x61。
  • z の ASCII コードは、0x7A。
という事で、簡単な変換式はないですなぁ。

BASE64 エンコード/デコードを行う COM コンポーネント



uuencode/uudecode
Base64 の元になった方法

3byte から、6bitづつ取ってきて、その値に 0x20 を加算。
その値の文字コードをそのまま使用する。
ただし、0x20 の場合(0x20 を加える前の値が 0x00)は、さらに 0x40 を加算する。

つまり「`!"#$%&'()*+,-./0123456789:;<='gt;?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_」が変換テーブル

BASE64 エンコード/デコードを行う COM コンポーネント に uuencode/uudecode を追加



uuencode/uudecode コマンド
ファイルのエンコード/デコードの UNIX 上のコマンドでは、
begin(半角スペース)(モード)(半角スペース)(ファイル名)(改行)
(長さ)(uuencode されたデータ)(改行)
....
`(改行)
end(改行)
モード UNIX のファイル書き込みモード(000-777)
ファイル名 そのままファイル名です
長さ 次に続くデータの長さを 1byte の uuencode で表現されたもの
コマンドでは、45文字ずつ、uuencode 処理を行います
`(改行) データがなくなったら、0byte ということを示す


Q-Encoding 法
下の Quoted-printable 法



Quoted-printable 法
RFC1522 で定義されているかも。

SMTP(ESMTP) で利用

主に欧州圏?

8bit目がオンの文字は、=(イコール)に続く、2桁の16進によって記述される。

= が、% の場合、そのまま CGI でコーディングと同等と言える。

COM を作ったです。



MIME のフォーマット
タイプ 文字列(大文字/小文字を区別しない)
/ 両側に空白はダメ
サブ・タイプ 文字列(大文字/小文字を区別しない)
; パラメータがある場合
パラメータ 名前=値
名前と値の間は空白はダメ
大文字/小文字はパラメータ名によってしたり、しなかったり


MIME
MIME(Multiple Internet Mail Extentions){多目的インターネット・メール拡張機能}とは、メール本文に構造化機能を与えるものであるが、SMTP との下位互換性も十分に備える。

RFC1590 に概説がある。

RFC1521 で定義されている。

さらに、RFC2045,RFC2046,RFC2047,RFC2048 でも、定義されている。

ESMTP とのからみが、RFC1892 で議論されている。

メールヘッダ部に新しいヘッダを追加することで、実現する。

MIME エンコードされたデータは、NVT ASCII の文字列となる。
という事で、旧来の SMTP システム(MTA システム)でも十分整合性が保たれる。

MIME に必須に条件は、MIME に対応した MUA だけであり、MTA は旧来のままでもよい。

RFC1521 で推奨している組み合わせ
Content-Type Content-Transfer-Encoding
text quoted-printable
image base64
audio base64
video base64
application/octet-stream base64
multipart と、message については、7bit としてエンコーディングされるべきである。

その他
message/http HTTP の TRACE メソッドの応答




MIME 用のメールヘッダ
MIME 用に新規追加されたヘッダ 意味など
Mime-Version MIME のバージョン
値は、1.0
Content-Type データの種類
タイプ/サブタイプ;サブオプション
デフォルトは、
text/plain; charset=US-ASCII
詳細は後述
Content-Transfer-Encoding 後述
Content-ID なんだろう?
Content-Description コンテンツを受信した方がそれをどう扱うか(ファイルにする/実行する)
後述


MIME 用のメールヘッダ
Content-Type ヘッダ
RFC1521 では
タイプは、7 種類。
サブタイプは、16 種類。
タイプ サブタイプ 意味
text plain そのままのテキスト
richtext リッチ・テキスト形式
enriched 高級なリッチ・テキスト
multipart
構造化本文に利用
mixed;boundary="文字列" 順番に処理されるべき複数の本文の部分
分割する文字列は、--文字列(ハイフンを二つ続けて、boundary で指定した文字列)
parallel 並列的に処理可能な複数の本文の部分
digest 電子メール・ダイジェスト
alternative;boundary="文字列" 複数の本文を持ち、全てのコンテンツは同一の意味を持つ
report RFC1892 で定義されている。
message rfc822 コンテンツは別の RFC822 メール・メッセージ
partial コンテンツはメール・メッセージの一部
external-body コンテンツは、メッセージへのポインタ
application octet-stream バイナリ・データ
postscript PostScript データ
image gif GIF 形式のデータ
jpeg Jpeg 形式のデータ
audio basic 8bit ISDN μ法則でコード化した音声データ
video mpeg MPEG1 形式のデータ


コンテンツのタイプなどを指定するのであるが、
Content-Type: Text/Plain; charset=iso-2022-jp
のように、コンテンツのタイプと同時に、文字コードも指定する場合が多い。

Octet-Stream の場合、
ファイル名をつけることがある
Content-Type: Application/Octet-Stream; name="filename.exe"
「name」は、Octet-Stream 用だったが、添付ファイルには、大抵はついているのが現状かも。



MIME 用のメールヘッダ
Content-Disposition ヘッダ
受信者がコンテンツをどう扱うかを示すヘッダ。
元々は、電子メールを受信したら、音を鳴らしたりしたかったためと考えられる。
Content-Disposition: attachment; name="filename.mid"
のような感じ。

Content-Type ヘッダよりも、添付ファイルのファイル名は、こちら側を使うのが原則であるが、Content-Type ヘッダと Content-Disposition ヘッダの両方に同じ値を書く場合が多いかも。



MIME 用のメールヘッダ
Content-Transfer-Encoding ヘッダ
種類は、5 種類。
7bit
NVT ASCII 形式。デフォルト
quoted-printable
上記で示してあるエンコーディング法
base64
上記で示してあるエンコーディング法
8bit
複数のキャラクタ行を持ち、それらのいくつかは、8bit 目がオンになっている。
binary
行を含む必要のない 8bit データ
上方の 3 種(7bit,quoted-printable,base64)は、NVT ASCII 形式のデータのみで構成されているので旧来の MTA で運用が可能。

下の 2 種(8bit,binary)については、ESMTP の 8bit 拡張モード(8bitmime コマンド)が受け入れられるサーバにのみ利用可能。



MIME による subject エンコーディング
subject:=?文字コード?エンコード形式?データ=?=
文字コードには、例えば iso-2022jp
エンコード形式は、BASE64 の場合は、B



MIME - multipart の例
Content-Type: Multipart/mixed; boundary="thome"
....

--thome
(最初の --"boundaryで指定した文字列")
(この境界の前のデータは無視される。)

文字列


--thome
MIME ヘッダがここに来る
Content-Type: Multipart/Alternative;boundary="thome2"

--thome2
Content-Type: Message/External-body;
  access-type="mail-server"
  server="address@hoge.com"
Content-Type:text/plain

SEND goge1.txt

ポインタとして、メールサーバ(address@hoge.com)にアクセスして、goge1.txt をゲットしてここに張りつけろという意味

--thome2
Content-Type: Message/External-body;
  access-type="anon-ftp"
  site="ftp.hoge.com"
  name="filen.txt"
  directory="pub"
Content-Type:text/plain

ポインタとして、匿名 FTP サーバメールサーバ(ftp://ftp.hoge.com/pub/filen.txt)にアクセスして、filen.txt をゲットしてここに張りつけろという意味

--thome2
文字列


--thome
(最後の --"boundaryで指定した文字列")
(この境界の後のデータは無視される。)



定義済みの MIME タイプ
IANA のここかな

または、ここかな



定義済み文字コード
キャラクタ・セット
IANA のここかな



S/MIME
RSA データ・セキュリティ社が主催のグループが、MIME メッセージの暗号・署名方法を規定した。

RSA データ・セキュリティ社が開発した PKCS#7 方式を利用。



品質値
MIME で指定できるのかな。
とりあえず、HTTP では使用する。

q= 値で、値の範囲は、0.000 から 1.000 まで。

大きい値ほど優先されます。

省略された場合、q=1.000 となります。
というか、一番優先させたいものだけが省略できます。

HTTP はここを参照



CGI エンコーディング
URL エンコーディング
ここを参照
それと、URL の項かな。

COM を作ったです。

こっちにもメモあり



数値実体参照
関連性は CGI なのかな。

「&#文字コード;」というエンコード方式です。

例えば、「'」->「&#39;」となる。
クロスサイト・スクリプティング対策とかでお目にかかりますな

ここを参照

それと、URL の項かな。

COM を作ったです。

こっちにもメモあり

リンク:



文字集合と、コード集合
以下、文字コード関連が続くので....自分なりのメモ

まずは、意味(目的)の異なる集合が二つあるので、その違いを明確に認識しないといけないらしい。
文字集合 コード集合
文字を集めてきて、一つ一つの文字に番号(連番)を振った集合 一つ一つの文字に、コード(bit列)を割り当てて、コンピュータで使えるようにした集合
unicode だと...
UCS-○ UTF-○


文字コードのサイズによって....
DBCS SBCS
2byteの空間で表現
(Double Byte Character Set)
1byteの空間で表現
(Single Byte Character Set)
アジア系の文字コード 欧米系の文字コード
MBCS(Multi Byte Character Set)
ほとんどは 2byte なのでMBCS≒DBCS
not MBCS




ISO8859
ヨーロッパ系の SBCS
ISO-8859-1 西欧諸国用(Latin1)
ISO-8859-2 東欧諸国用(Latin2)
ISO-8859-3 エスペラント言語用(Latin3)
ISO-8859-4 北欧諸国用(Latin4)
ISO-8859-5 ロシア語(キリル文字)
ISO-8859-6 アラビア文字
ISO-8859-7 ギリシア文字
ISO-8859-8 ヘブライ文字
ISO-8859-9 トルコ語用(Latin5)
ISO-8859-10 北欧語(Latin6)




ASCII(American Standard Code for Information Interchange)
ISO646
半角カタカナが追加されて JIS X 0201



EBCDIC(Extended Binary Coded Decimal Interchange Code)
IBM が規格したメインフレーム用の文字コード(8bit)



KEIS(Kanji processing Extended Information System code)
日立独自の JIS ベースのメインフレーム向け文字コード

1byte 部分は、EBCDIC を使用する



UCS-2(ISO/IEC 10646-1) Unicode のエンコーディング
CJKV
16bit で世界中の文字を表現しようという文字集合/(文字セット)

文化/国を超えて似た漢字をまとめちゃったので、UCS-2 の漢字の集合を CJKV(Chinese Japanese Korean Vietnamese)という。
といっても、ベトナムは脱退した模様なので、CJK とも言うらしい

Windows では、内部で UCS-2 に似たコード体系を採用している。
一文字を16bit固定としている。

2Byte の Unicode Character Set (UCS-2) は、2byte の 16 進数コードを NNNN として、
%uNNNN
と 16進数表記できる。



Windows の UNICODE
UTF-16 だったらしい。
といっても、WindowsXP からサロゲート機能(4byte の UTF-16)に対応したらしい

リンク:



UCS-4
ISO/IEC 10646-1
16bit では足りなかったので、31bit(4byte) 空間での UNICODE の文字集合

先頭 Byte から、群(group)、面(plane)、区(row)、点(cell)という。

群は、128個(7bit)

「群=0x00,面=0xE0-0xff」と「群=60-7F」の空間は予約済みである。

「群=0x00,面=0x00」の空間は UCS-2 そのものとしている。



UTF-8 可変長 UNICODE
2byte のデータ(まぁ、文字ですな)の UTF-8(UCS Transformation Format) での表現。

RFC2279

7bit(7bit ASCII)を z を 0 or 1 として 1byte を y,z を 0 or 1 として、
2byte を x,y,z を 0 or 1 として
7bit zzzzzzz
1byte yzzzzzzz
2byte xxxxxxxxyzzzzzzz
として表現すると
(o は 0 or 1 の場所にある 0 を示す)
(0 は定義されて、0 でなければいけない値)
(1 は定義されて、1 でなければいけない値)
1byte の UTF-8 0zzzzzzz 7bit 表現
2byte の UTF-8 110ooooz10zzzzzz 7bit 表現
110oooyz10zzzzzz 1byte 表現
3byte の UTF-8 1110oooo10oooooz10zzzzzz 7bit 表現
1110oooo10ooooyz10zzzzzz 1byte 表現
1110xxxx10xxxxyz10zzzzzz
2byte 表現
ちなみに赤字のところは、仕様上禁止されている表現。
表現できる最も少ないバイト数で表現する事が仕様上、求められている。
(これを用いた不正行為として MS00-057 を参照しよう)

よく見ると、先頭の最初の 0 が出るまでの 1 の数が、データの長さ。
それ以降は、10... で始まる byte となっているねぇ。

ASCII に限れば UTF-8 と同値。

実際には、UCS-4 まで表現可能(1-4Byte)。

UTF-8 では、1-6Byte で表現。

リンク:



ISO-2022-JP
インターネット電子メールにて標準で利用されている。

RFC1468 で定義されている。



UTF-7
電子メール用?



UTF-16
UCS-2 の領域は、そのまま使う
(UCS-2 以外の)UCS-4 は 4Byte で表現する(サロゲート機能)
ただし、UCS-4 の全てを表現することはできないらしい

ビックエンディアンとリトルエンディアンのパターンがある
BOM の登場...



UTF-32
こんなものもあるらしい



BOM(Byte Order Mark)
データ先頭に位置する
ビックエンディアンかリトルエンディアンの判定につかう
16進数で「0xFEFF」として正しく読めるエンディアンが正解という事

最近では「UNICODE である」という目印として使われる場合があるらしい。

ISO-10646(≒UNICODE)では、途中に出てもいいらしい(Zero Width NonBreaking Space)



JIS 漢字コード
旧JIS と新JIS があるらしい
旧 JIS 新 JIS
JIS C 6226-1978 JIS X 0208-1983 以降


UNICODE は新JIS をベースにしている



IBM 拡張
旧 JIS(JIS-C-6266) に追加(FA40以降)



NEC 拡張
NEC特殊文字
NEC選定IBM拡張文字
98文字
IBM 拡張にさらに追加



マイクロソフト標準キャラクタセット
JIS-X-0208 に加えて、IBM 拡張とNEC 拡張を加えた文字集合

重複している場合もある
NEC 拡張では一部が除かれた



JIS
JIS は、基本的に漢字インコードと呼ばれるコードの次のコードから、漢字モード(日本語モード)。
漢字アウトコードと呼ばれるコードによって、ASCII コードに移行する方法。

JIS 漢字コードは、
ASCII コードと衝突(どちらを指し示しているのか判断できない) するので、インコード、アウトコードによって、漢字モード、ASCII モードというモード切り替え方式によって、ASCII 文字と共存します。

欠点としては、不可視のコードが増えるので、直感的に分かりにくい。という点。
例えば、abc漢字de という文字列の場合、9byte に、漢字インコードと漢字アウトコードを加える必要がある。
これはつまり文字列のメモリを計算(確保)しにくい。

一方、ShiftJIS,EUC の場合、9byte (文字を数えれば{半角に 1 加えて、全角に 2 を加えるだけ}いいだけ)で済むという事でプログラミングは簡単になる。

ASCII エスケープ文字 "\(0x5C)" と衝突する。

JIS X 0211 JIS制御コード
JIS X 0201 ローマ字(ASCII)
JIS X 0201 JISカナ(半角カナ)
JIS X 0208 JIS漢字
JIS X 0212 JIS補助漢字


RFC-1468 では、JISカナとJIS補助漢字は除外されている



JIS エスケープシーケンス
エスケープシーケンスを使うことで、一つのコードを複数の文字(文字集合に割り当てられる)
- 0x00-0x1F,0x7F 制御コード
1B 28 42 0x20-0x7E ASCII
1B 28 4A 0x20-0x7E JISローマ字
1B 28 49 0x21-0x5F 半角カナ
1B 24 40 0x21-0x7E,0x21-0x7E 旧JIS漢字 (1978)
1B 24 42 0x21-0x7E,0x21-0x7E 新JIS漢字 (1983/1990)
1B 24 44 0x21-0x7E,0x21-0x7E JIS補助漢字




JIS
JIS X 0208
旧JIS C 6226
漢字インコード(シフトイン)
0x1B + 0x24 + 0x42
漢字アウトコード(シフトアウト)
0x1B + 0x28 + 0x4A


JIS
ISO2022-jp
漢字インコード(シフトイン)
0x1B + 0x24 + 0x42
漢字アウトコード(シフトアウト)
0x1B + 0x28 + 0x42


SJIS(Shift-JIS)
JIS C 6220
パソコン関連で利用されている。

MS-Windows,MS-DOS,Macintosh,UNIX(一部)で利用されている。

JIS コードの第一バイトを、ASCII セットの定義されていない 0x81 以降にずらした(シフト)文字セット。

文字列処理としては、1byte ずつ処理をしていき、もし、ASCII 文字でなければ、ShiftJIS 第一バイトとして、次の 1byte を会わせて、2byte 文字として処理をします。

ただ、漢字2バイト目は、ASCII 文字セットと衝突する事に注意。

ASCII エスケープ文字 "\(0x5C)" と衝突する。
日本語対応コンパイラが対応してくれる場合もあり。


コードは、sNKF32COM.dll にも追加した。

0x00-0x1F&0x7F 制御コード
0x20-0x7E ASCII
0xA1-0xDF 半角カナ
0x81-0x9F&0xE0-0xEF,0x40-0x7E&0x80-0xFC 漢字




JIS <--> S-JIS
  • S-JIS -> JIS
    if(第一バイト <= 0x9F){
    第一バイト = 第一バイト - 0x71
    }
    else{
    第一バイト = 第一バイト - 0xB1
    }
    第一バイト = 2 * 第一バイト + 1
    if(第ニバイト > 0x7F){
    第ニバイト = 第ニバイト - 1
    }
    if(第ニバイト >= 0x9E){
    第ニバイト = 第ニバイト - 0x7D
    第一バイト = 第一バイト + 1
    }
    else{
    第ニバイト = 第ニバイト - 0x1F
    }
  • JIS -> S-JIS
    if(第一バイトが奇数){
    第二バイト = 第二バイト + 0x1F
    }
    else{
    第二バイト = 第二バイト + 0x7D
    }
    if(第二バイト >= 0x7F){
    第二バイト = 第二バイト + 1
    }
    第一バイト = 0x81 + (第一バイト - 0x21)/2
    if(第一バイト >= 0x9F){
    第一バイト = 第一バイト + 0x40
    }




EUC(Extended Unix Code)
UNIX で利用。

0x00-0x1F&0x7F 制御コード
0x20-0x7E ASCII
0x8E,0xA1-0xDF 半角カナ
0xA1-0xFE,0xA1-0xFE 漢字
0x8F,0xA1-0xFE,0xA1-0xFE 補助漢字




UNICODE
MS-WindowsNT4.0,MS-Windows2000 の内部で利用されている。

UNICODE 表へリンク



RACE
マルチ・バイト・ドメイン(日本語ドメイン)などで利用されている。

まだ、InternetDraft の状態のようだ。

5 つの byte を 8 個に分ける?

draft-ietf-idn-race-02.txt



ACE
ACE とは、ASCII Compatible Encoding

日本語ドメイン用の変換アルゴリズム!?



Punycode
国際化ドメイン用の変換アルゴリズム

UNICODE 符号化方式の一つ。

非 ASCII ドメイン名を「XN--」+「ASCII文字列」に変換する。



ヒドゥン・ドット・アルゴリズム(RFC821)
SMTP のメール本文では、.(ピリオド) だけの行をメール・メッセージ終了を意味しているので、行頭に .(ピリオド)がある場合、..(ピリオドを二つ)にして、送信する。

例えば、
. ..
.abc ..abc
.. ...


URL エンコーディング
文字のビット列(8bit)を 16進数表示の 2 桁と、その前方に「%」をつける。

a -> %61

半角スペース(0x20)は、クエリー文字列内では、「+」に変換する。
そうでない場合は、「%20」へ変換する。

16進数表記時のアルファベット(a-f)は、大文字でも小文字でもよい。

変換する必要の無い文字列などは、ここ



X.509 証明書
ISO,IEC,ITC が定めた電子証明書の形式。

バージョン1 が、1988年。
バージョン2 が、1993年に登場。
バージョン3 が、1996年に登場。

形式
証明書バージョン X.509 のバージョン(1,2,3,...)
証明書シリアル番号 この証明書を識別する一意な値(認証局が割当てる)
デジタル証明アルゴリズムの識別子 この証明書に署名した認証局のデジタルID のアルゴリズムの識別子
発行者(認証局)の名前 認証局の X.500 名
有効期限 開始・終了日時
証明書の持ち主の名前 この証明書の持ち主の X.500 名
証明書の持ち主の公開鍵情報
アルゴリズム識別子と公開鍵
この証明書の公開鍵アルゴリズムの識別子
発行者ID バージョン2 から
オプション
証明書の持ち主のID バージョン2 から
オプション
拡張領域 バージョン3 から
オプション
認証局のデジタルID
オブジェクト識別子
SNMP のようだ。
トップレベルは、
0 = ITU
1 = ISO
2 = ISO-ITU

ISO では、第二レベルが
0 = ISO 標準
2 = ISO が認定した国
3 = ISO が認定した国際機関

ISO-ITU では、第二レベルが

16 = 国

となり、その下には、840(米国{ANSI が管理})があり、その下に、1(米国組織)がある。

一般には、セパレータは、半角スペースを用いる。
「{コメント(番号) コメント(番号)...}」
という感じ。

暗号のオブジェクト識別子
デジタル署名:SHA-1 を使った RSA (NIST OIW)
{iso(1) identified-organization(3) oiw(14) secsig(3) algorithm(2) 29}
デジタル署名:SHA-1 を使った DSA (ANSI x9.57)
{iso(1) member-body(2) us(840) x9-57(10040) x9algorithm(4) dsa-with-sha1(3)}
デジタル署名:SHA-1 を使った DSA (米国国防総省 MISSI プログラム)
{joint-iso-ccitt(2) country(16) us(840) organization(1) us-government(101) dod(2) infosec(1) algorithms(1) 2}
デジタル署名:MD5 を使った RSA (RSA データ・セキュリティ社 PKCS#1)
{iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) md5WithRSAEncryption(4)}




X.509 証明書 ver3
基本的に上述の通りであるが、X.500 名でなければいけなかった名前が、同一性、一意性が保証できる名前ならなんでもよくなった。

よく使われる名前は、
  • インターネット・ドメイン名
  • インターネット電子メールアドレス
  • X.400 電子メールアドレス
  • X.500 名(X.500 ディレクトリ名)
  • EDI 当事者名
  • URL
  • インターネット IP アドレス
  • 登録識別子
などがよく使われる。


拡張領域
ver3 から追加
拡張型 重要度 拡張領域値
以上の構造を単位に複数の値を持つ。



MD5
MD5 ハッシュ関数は、RFC1321 に定義されている。

JavaScript で MD5 を実装してみました。ここ



MD4
MD4 ハッシュ関数は、RFC1320 に定義されている。

JavaScript で MD4 を実装してみました。ここ



PGP の文字列エンコード
PGP のデータと署名が分離しているデータは、データ列の各行の先頭が「-」の場合は、「-(半角スペース)-」に置換されている。

PGP メモはここのどこか

PGP を使うようにする COM は



Mac Binary
COM があるそうだ。

リンク:




戻る