この記事はGMOインターネットグループ Advent Calendar 2024 9日目の記事です。
GMOブランドセキュリティ株式会社の寺門です。
今回はデジタル証明書の基礎技術であるX.509とVMCについて紹介します。
目次
はじめに
近年、フィッシング詐欺やスパムメールが増加し、電子メールの信頼性を向上させるための技術が求めらています。その中で注目されるのが、BIMI(Brand Indicators for Message Identification)とVMC(Verified Mark Certificates)です。特にVMCは、ブランドロゴの信頼性をデジタル証明書で保証する仕組みであり、その基盤技術としてX.509が利用されています。
本記事では、X.509の基本的な仕組みから始め、BIMIとVMCの役割、そしてX.509とVMCがどのように関連しているのかを簡潔に解説します。
X.509とは
X.509の概要
X.509はデジタル証明書の国際標準規格(ITU-T勧告)として、1988年に初めて制定されました。この規格は、公開鍵インフラストラクチャー(PKI, Public Key Infrastructure)の一部として機能し、デジタル証明書を通じて、エンティティのアイデンティティを検証するために使用されます。インターネットの安全性を支える重要な基盤技術であり、以下の分野で利用されています。
- SSL/TLS証明書:ウェブサイト間の暗号化通信を実現
- コード署名:ソフトウェアの信頼性を保証
- 電子署名:電子的な文書の改ざんを防止
- 電子メール証明書:メールの真正性を確認
X.509証明書の構造
X.509証明書には、以下の重要なフィールドが含まれています。
- バージョン番号:使用するX.509規格のバージョン、一般的にはv3
- シリアル番号:証明書を一意に識別するための番号
- 署名アルゴリズム:証明書の信頼性を保証するための暗号化アルゴリズム
- 発行者(Issuer)情報:証明書の発行元の詳細情報
- 有効期限:証明書が有効な開始日と終了日
- 対象(Subject)情報:証明書の対象となるエンティティの情報
- 拡張フィールド:特定用途のための追加情報
- 公開鍵:対象エンティティの公開鍵
拡張フィールドの役割
X.509 v3で導入された拡張フィールドは、証明書の柔軟性を高めるために設計されています。技術書には拡張フィールドの構造が定義されており、用途に合わせて様々な拡張子を設計することができます。
LogotypeImageInfo ::= SEQUENCE {
type [0] LogotypeImageType DEFAULT color,
fileSize INTEGER, -- In octets
xSize INTEGER, -- Horizontal size in pixels
ySize INTEGER, -- Vertical size in pixels
resolution LogotypeImageResolution OPTIONAL,
language [4] IA5String OPTIONAL }
このフィールドは、VMCのような新しい技術にも対応できる拡張性を提供しています。
BIMI/VMCとは
BIMIの目的と仕組み
BIMI(Brand Indicators for Message Identification)は、ブランドロゴをメールクライアント上に表示するための仕組みです。この技術は、メールの送信者がブランドロゴを正当かつ安全に表示できることを保証します。これにより、次のような効果が期待されます。
- ブランド認識の向上:受信者がメールを一目で信頼できる
- セキュリティの強化:フィッシング詐欺やなりすましのリスクを軽減
- マーケティング効果の向上:ブランドイメージの一貫性を保つ
BIMIを導入するためには、送信ドメイン認証技術(SPF、DKIM、DMARC)のセットアップが必要であり、さらにVMCによるブランドロゴの認証が必須です。
VMCとは何か
VMC(Verified Mark Certificate)は、BIMIの実現に必要なデジタル証明書です。特別な監査を通った会社が発行し、ブランドがロゴを正当に所有し、使用する権利があることを商標権を使って証明します。VMCの主な役割は以下の通りです。
- ロゴの正当性の保証:証明書内に格納されたブランドロゴが改ざんされていないことを確認
- ブランドの信頼性の向上:メール受信者に対して、送信者が認証済みであることを保証
- BIMIの技術的基盤の提供:BIMIの使用に準拠するための証明書
X.509とVMC
VMCにおけるX.509の応用
VMCは、X.509証明書の拡張フィールドを活用して、ブランドロゴに関する情報を格納します。具体的には、以下のような仕組みが使われています。
- SVGロゴのエンコード:ブランドロゴはSVG形式で証明書に埋め込まれます。SVGデータは署名され、改竄を防止します。
- 特定のOID(Object Identifier):X.509証明書の拡張フィールドには、ロゴに関する追加情報を記録するためのOIDが指定されています。具体的には、OID: 1.3.6.1.5.5.7.1.12(logotype extension)や、OID: 1.3.6.1.4.1.53087.4.1(pilot identifier extension)などを使用し、RFC3709やRFC6170に定義されています。
- 署名アルゴリズム:SHA-256やRSAなど、強力な暗号技術を使用して証明書全体を保護します。
実際のVMCの中身を見てみるとイメージが湧きやすいと思うので、CNNのVMCを見てみましょう。
terakado@01-0083444 Downloads % openssl x509 -noout -text -in cnn.pem
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
0b:6b:bf:fd:69:86:05:b2:27:8e:8b:14:43:e5:ce:3b
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, O=DigiCert, Inc., CN=DigiCert Verified Mark RSA4096 SHA256 2021 CA1
Validity
Not Before: Jul 15 00:00:00 2024 GMT
Not After : Aug 15 23:59:59 2025 GMT
Subject: jurisdictionC=US, jurisdictionST=Delaware, businessCategory=Private Organization, serialNumber=2976730, C=US, ST=Georgia, L=Atlanta, street=190 Marietta St NW, O=Cable News Network, Inc., CN=Cable News Network, Inc., 1.3.6.1.4.1.53087.1.13=Registered Mark, 1.3.6.1.4.1.53087.1.3=US, 1.3.6.1.4.1.53087.1.4=5817930
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:86:0f:c0:72:55:a7:2d:d6:dd:61:a6:99:b1:87:
bc:a7:e7:8a:d1:af:ee:cc:c0:e4:90:4f:16:40:66:
36:5f:c3:14:86:9f:82:aa:9c:ca:67:c2:bc:85:e9:
ca:60:f9:5b:c6:6d:61:07:d7:d6:ae:50:a5:0d:d0:
44:a6:7c:96:87:08:de:f5:9d:60:2d:58:4f:71:6a:
36:8f:3c:4e:9f:58:5f:1f:ef:84:16:14:5f:5a:04:
16:b0:dc:d5:ae:b0:d7:94:6c:35:ee:42:e9:55:0d:
1e:56:98:ea:28:c9:e5:4d:62:11:2b:34:56:8e:10:
30:ff:92:7a:cb:45:1e:28:ca:a7:fa:b3:9a:09:03:
a5:61:fa:77:6c:3a:a7:15:62:b2:01:b3:4b:af:a8:
65:6c:57:48:1b:33:c7:30:62:c7:08:d1:d6:c0:ed:
50:c3:53:d9:2a:96:e8:28:78:72:18:55:ad:85:76:
a6:1b:78:8d:9c:66:23:c4:3c:ed:3d:eb:24:6b:52:
e6:66:38:93:2f:b4:23:05:fa:d3:88:28:c1:e0:7d:
13:65:03:b3:bd:6c:03:d6:6c:7f:3f:cb:86:36:61:
23:aa:82:56:28:2f:71:d1:97:68:8c:24:f4:ee:9a:
68:3b:a3:82:7a:f4:47:55:4b:93:df:8c:3b:f1:76:
c7:df
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Authority Key Identifier:
BE:9F:BD:8D:57:6D:95:B5:AD:63:C3:97:4E:AB:A8:84:5D:3A:07:F5
X509v3 Subject Key Identifier:
2B:55:A5:D5:6F:43:8D:BB:32:BA:45:B8:DC:66:A0:F9:85:27:43:49
X509v3 Subject Alternative Name:
DNS:cnn.com
X509v3 Certificate Policies:
Policy: 2.16.840.1.114412.0.2.5
CPS: http://www.digicert.com/CPS
Policy: 1.3.6.1.4.1.53087.1.1
X509v3 Extended Key Usage:
Brand Indicator for Message Identification
X509v3 CRL Distribution Points:
Full Name:
URI:http://crl3.digicert.com/DigiCertVerifiedMarkRSA4096SHA2562021CA1.crl
Full Name:
URI:http://crl4.digicert.com/DigiCertVerifiedMarkRSA4096SHA2562021CA1.crl
Authority Information Access:
CA Issuers - URI:http://cacerts.digicert.com/DigiCertVerifiedMarkRSA4096SHA2562021CA1.crt
X509v3 Basic Constraints: critical
CA:FALSE
1.3.6.1.5.5.7.1.12:
image/svg+xml0#0!0...+............c<f.bb.JxWl..v8.0.......data:image/svg+xml;base64,H4sIAAAAAAAACp1UTW/bOBA9x7+Cq54KkDSHFL+MOEUbFE2BblFgAV8XrqLGwmptQ1bktL9+31AJ0kNQYAsk5HiGnHnz5lGXbx7+7cXUDqfusF9XpE0l2n1zuO32d+vqfvymUvXmanH5h1LiQ7tvh+14GFbi7e3hays+9v39aSwuYWuNy1L8tfkg3j8cD8MovvT3d+rjXuji3Mw1ViJoY8S7+66/Fea1EEoh/Wm6+xmErcTX7an9Mhy+dX27rsZu/10dT5XobtfVp+33dvibKgHk+9O62o3jcbVcns9nfXb6MNwtrTFmiZSPR1YPfbf/56WDlHNelmi1mLr2/O7wsK6MMCKHqP28liSr03HbAMhxaE/tMLUVMI/d2LdX158/Xy5nc3F53I47Acj9unp1fQ0UYBOI/4wxay+dddpONpCuGyPJ6FoFuClrUhS0lZZ0ahTpLI32yumEPSmvI++NirqWRpGHz+morFUE0j+FWMs6BZ0XF71CcqfIeD7vUIAPJ23x7xVZ3IracSRLQnFc1KHsebKGq/8CV9JOWqSCPyuDmI3IR047LuxxUGWgAIbAfvIvIkgzglqSZgQBCPIjAsocAgJ0AI4kJFUrXop1YxMKNZw9MQ3W4KKvGWMxeQX+Of7sl8U/2zug3nk7KZd12Clv0VQCBBz1GSxHppV8gknBcl8NyRTBQCQmxEeOzHFedwTObOPQmjQyYLoYCmxY6A0QJpVxES0hWnMG9GUlqwomCGtqkiEzAko8DCCdTSaZFhe4HzX97v1NEdxNEd+PavkLfVL0GG6d0H8DjiTYYE2hFpnI6U3pnFf0bFA44DwmBTgqzBsvG5cs6xBjYBnJwDMHEslgVZERVKQsJ85F5iRtSe148qxv/HA1Q0iIl1lCSeDAMus14/L8IHKQrDjsOqGeYz/OMmSeBgtNsprABJJBZ6rmfGAmzyBfgkhPEO0TxPQEMchZ6M8gjfSEnV+znB/cs6s4LMeYOyT+nwB5bjtWaZyI2+W60DxrQNFMeiwma0DVEBtEoObJ10XuRQ/c1/SkoN+7zQ+DStsYCV5ZUaHhZ2KgACrfJY4ZrLas0MVOhRJwzBsK43tVPioJf6dHU5ZfN875jYvlMS4uri0aDxK/eR7QJESIp+/kT/qchcxf96vFf2yTubu9BgAA
CT Precertificate SCTs:
Signed Certificate Timestamp:
Version : v1 (0x0)
Log ID : 55:59:53:AE:30:96:00:80:6C:D2:EB:52:08:A6:C9:9E:
93:18:28:AC:10:56:B4:42:1C:55:36:15:4C:5F:75:AC
Timestamp : Jul 15 18:58:05.865 2024 GMT
Extensions: none
Signature : ecdsa-with-SHA256
30:45:02:21:00:93:06:5D:61:37:F4:AF:09:9E:6E:29:
9C:21:E5:86:BF:CD:75:06:2E:DC:44:6C:8A:A6:19:97:
89:FA:3E:D9:A1:02:20:1D:22:99:C3:09:F4:00:AF:E4:
BD:01:D0:56:00:95:20:07:4A:DE:13:E0:B1:DB:EC:CA:
FC:8C:88:EC:8C:9C:28
Signature Algorithm: sha256WithRSAEncryption
Signature Value:
d1:57:25:f2:2a:83:b1:19:f3:63:ba:44:f5:a5:a9:af:61:3d:
60:8b:e8:91:2d:1a:38:21:47:74:2f:8e:eb:0d:a1:2c:97:68:
6f:32:c2:21:2a:b4:1a:1d:35:e1:60:4f:4d:ef:aa:30:b0:cb:
a8:88:b0:e8:0a:b5:f5:d2:3f:22:75:46:42:47:ec:ff:75:bc:
fc:dd:92:24:a4:b5:03:1c:b2:90:0d:0b:d6:7a:c1:6b:80:e5:
56:34:05:fd:49:a4:7d:c7:8f:b6:48:47:36:8d:97:24:93:07:
a8:79:ea:8e:0e:52:79:1d:02:31:93:8f:a4:44:44:37:8f:56:
5f:41:57:d9:87:96:d7:33:3f:a8:22:6b:fd:fa:54:93:64:d1:
f4:76:3b:11:83:69:73:7d:58:c5:82:54:6e:f8:2a:3c:6a:a8:
ff:e1:e2:b6:b6:68:56:29:64:d2:dd:df:34:6e:f1:aa:3a:9e:
44:cb:67:21:08:2e:a2:7b:43:fd:45:32:50:0e:44:71:2e:ee:
8f:08:22:3c:01:d6:4f:28:81:df:51:b2:91:82:69:b0:d8:fd:
bb:a3:77:e3:35:4c:8a:81:c4:3e:71:68:ce:37:1a:ca:a8:8c:
ef:f6:40:11:67:93:28:23:76:d9:4b:55:8f:62:13:53:a3:ba:
bb:92:f9:ee:89:91:b7:f1:4f:95:f6:e4:3b:ee:76:a7:7c:7e:
e1:d8:55:03:d9:70:31:50:13:38:13:62:75:58:c1:9f:35:a8:
e5:e2:5a:e2:32:ff:02:cf:fa:da:9d:f3:f3:c0:d2:76:9f:3d:
f7:1c:8e:00:c1:a7:7d:d1:9f:38:45:a4:c7:64:2b:3b:8b:2c:
7c:c3:2b:35:a8:6b:17:58:c0:ed:0d:70:80:99:1a:ae:e8:c4:
99:6c:8e:c5:15:07:d5:fd:f0:09:a7:a2:e6:42:2f:5a:5a:ac:
8b:bf:6f:61:91:fa:38:74:9a:fd:50:86:84:85:22:2a:a2:25:
21:22:2b:cb:70:a0:fa:3d:43:31:a0:f7:d8:45:8e:61:6b:a1:
a5:0a:ac:4f:8d:39:93:38:cc:3c:9d:43:80:69:5e:1a:b4:17:
6e:3c:8f:e3:72:cb:93:1f:1c:2e:1d:71:ee:02:da:34:3e:dd:
33:b9:e0:90:ac:a3:e2:3b:dd:fd:73:fa:a8:9a:6d:55:ce:68:
70:89:59:b7:a0:68:f6:16:5e:43:2f:cb:f5:32:f2:95:ae:51:
38:27:0e:28:20:cf:bd:d3:74:a6:98:33:9a:23:12:09:60:92:
7b:1d:2a:b0:d4:99:18:37:58:50:33:78:0a:43:47:c6:81:37:
1c:a7:9d:b1:d3:04:fe:3c
まず注目していただきたいのは「X509v3 extensions」と表示されている部分です。ここにエンベッドされるデータこそがX.509の拡張子を利用している部分になります。「Authority Key Identifier」や「CRL Distribution Points」などはSSLを知っている方にとっては見慣れている内容かと思います。
次に見ていただきたいのは拡張子が「1.3.6.1.5.5.7.1.12」と記されている部分です。この拡張子がVMC特有のロゴ情報になります。見て分かる通り、SVG形式のロゴデータをbase64で埋め込んでいます。
正式にはこの拡張子は「Logotype extension」という名前がつけられているのですが、OpenSSLでは名前ではなくOIDで表示されています。(寺門は最初ここにすごく戸惑いました)
いろいろ調べた結果、OpenSSLにはデフォルトで「Authority Key Identifier」などよく使用される拡張子はOIDで認識してくれるように作られており自動で認識してくれますが、「Logotype extension」はあまり使用されていないことから「この拡張子は何なのか知らないけど、こんなデータが埋め込まれてたよ」と言う感じでOIDとデータを表示してくれているそうです。
これにより、VMCは既存のPKIインフラとシームレスに統合され、新しい用途に対応できる柔軟性を備えています。
技術的メリット
VMCがX.509を基盤とすることで得られるメリットは以下の通りです。
- 互換性の確保:インターネット全体で使用されているPKIと完全に互換性を保つ
- 信頼モデルの活用:既存のCAネットワークを利用して、証明書の信頼性を保証
- 柔軟な拡張性:X.509の拡張フィールドを使用して、新たな情報や用途を追加可能
VMCの発行プロセス
VMCを取得するための手順は以下の通りです。
- ドメイン認証の設定:SPF、DKIM、DMARCを正しく構成する
- ブランドロゴの確認:ロゴが国際商標データベースに登録されていることを確認
- 証明書発行の申請:VMCを発行する会社に申請
- ロゴと情報の審査:CAがロゴの正当性や商標登録の状態を確認
- 証明書の発行:審査が通過するとVMCが発行される
まとめ
VMCは、X.509という堅牢な証明書規格を基盤として、ブランドロゴの信頼性を保証する新たな技術です。X.509の柔軟性を活用することで、VMCは既存のインフラと互換性を保ちながら、ブランド認証という新たなニーズに対応しています。
BIMIとVMCを導入することで、ブランドの信頼性向上やメール受信者への安心感を提供でき、フィッシング詐欺対策としても有効です。企業にとっては、自社ブランドの保護と顧客体験の向上を実現する重要な手段となり、注目すべき技術だと個人的に思っています。
また次の機会があれば、OpenSSLで自作のVMCを作成方法について書こうと思っていますので、よろしくお願いします。
ブログの著者欄
採用情報
関連記事
KEYWORD
CATEGORY
-
技術情報(446)
-
イベント(161)
-
カルチャー(36)
-
デザイン(17)
TAG
- 5G
- Adam byGMO
- AI
- AWX
- BIT VALLEY
- blockchain
- ChatGPT
- cloudflare
- cloudnative
- CloudStack
- CM
- CNDO
- CNDT
- CODEGYM Academy
- ConoHa
- CS
- CSS
- CTF
- DC
- Designship
- Desiner
- DeveloperExpert
- DevSecOpsThon
- DNS
- Docker
- DTF
- GitLab
- GMO Developers Day
- GMO Developers Night
- GMO GPUクラウド
- GMO Hacking Night
- GMO kitaQ
- GMO SONIC
- GMOアドパートナーズ
- GMOアドマーケティング
- GMOイエラエ
- GMOグローバルサイン
- GMOソリューションパートナー
- GMOデジキッズ
- GMOブランドセキュリティ
- GMOペイメントゲートウェイ
- GMOペパボ
- GMOリサーチ
- Go
- GTB
- Hardning
- Harvester
- HCI
- iOS
- IoT
- ISUCON
- JapanDrone
- Java
- JJUG
- K8s
- Kaigi on Rails
- Kids VALLEY
- LLM
- MetaMask
- MySQL
- NFT
- NVIDIA
- OpenStack
- Perl
- perplexity
- PHP
- PHPcon
- PHPerKaigi
- QUIC
- Rancher
- RPA
- Ruby
- Selenium
- Spectrum Tokyo Meetup
- splunk
- SRE
- SSL
- Terraform
- TLS
- TypeScript
- UI/UX
- VLAN
- VS Code
- アドベントカレンダー
- インターンシップ
- オブジェクト指向
- オンボーディング
- お名前.com
- カルチャー
- コンテナ
- スクラム
- スペシャリスト
- セキュリティ
- ソフトウェアテスト
- チームビルディング
- ドローン
- ネットワーク
- プログラミング教育
- ブロックチェーン
- マルチプレイ
- ミドルウェア
- モバイル
- ゆめみらいワーク
- リモートワーク
- レンタルサーバー
- 京大ミートアップ
- 協賛レポート
- 基礎
- 多拠点開発
- 大学授業
- 宮崎オフィス
- 応用
- 技育プロジェクト
- 新卒
- 暗号
- 機械学習
- 決済
PICKUP