SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
Hybrid Public Key Encryption (HPKE)
栗原 淳
株式会社ゼタント
兵庫県立大学大学院
ATR
October 6, 2021
Jun Kurihara (Zettant) HPKE October 6, 2021 1 / 40
はじめに
Jun Kurihara (Zettant) HPKE October 6, 2021 2 / 40
この資料は
2019 年に IETF においてドラフト提案、2021 年現在において標準化が進
んでいる、Hybrid Public Key Encryption (HPKE)という規格について、栗
原自身の理解を深めるとともに、技術者にざっくり解説することを目的
とする。
HPKE の IETF 標準化状況 (2021-10-01 時点で draft 12)
IETF: https://datatracker.ietf.org/doc/draft-irtf-cfrg-hpke/
GitHub: https://github.com/cfrg/draft-irtf-cfrg-hpke
本講義資料では、ある程度の前提知識を要求する。栗原の別の講義資料1
を参照しておくと良いだろう。
1https://github.com/junkurihara/lecture-security_engineering の 2∼6 回目あたり。
Jun Kurihara (Zettant) HPKE October 6, 2021 3 / 40
HPKE をざっくり言うと
Hybrid Public Key Encryption という「規格」
古典的な認証機能付きハイブリッド暗号化のフォーマット規定と
いう位置付け、と思って良い。サポート性、再利用性、将来的な
拡張性を高める目的で策定されている。
任意長のデータを、受信者の公開鍵2使って暗号化
将来的に耐量子公開鍵暗号をサポートすることも想定
2現状では楕円曲線暗号の公開鍵のみ (i.e., ECDH)
Jun Kurihara (Zettant) HPKE October 6, 2021 4 / 40
Receiver
(Server)
Public Key
Private Key
Sender
(Client)
Public Key
Private Key
ECDH + HKDF ECDH + HKDF
Content Key
AES-GCM
AES-GCM
Encrypted
& Authenticated
Decrypted
& Verified
Figure: ECDH+HKDF+AES-GCM によるハイブリッド暗号化イメージ
上図のようなハイブリッド暗号化のプロトコル、鍵フォーマット、
暗号化データのフォーマットなどを一定に定めて、HPKE を策定。
⇒ 今までバラバラだったハイブリッド暗号化プロトコルが統一さ
れ、複数環境での相互接続性が担保される。3
3例: 言語によって異なるライブラリを使っていても、データは同様に扱えるように。JavaScript
(WebCrypto) と C (OpenSSL) で統一されたハイブリッド暗号化ライブラリが用意されたり (すると良
いけど JS 向けは今の所自分で作るしかない)。
Jun Kurihara (Zettant) HPKE October 6, 2021 5 / 40
HPKE の応用事例
HPKE はまだその規格は IETF RFC のドラフトであるが、既に別の
IETF RFC ドラフトや商用サービス、Open Source Software (OSS)
で利用されている。
例:
RFC ドラフト: TLS Encrypted Client Hello (ECH)45
RFC ドラフト: Messaging Layer Security (MLS)6
RFC ドラフト: Oblivious DNS over HTTS (ODoH)7
Apple iCloud+ Private Relay (ODoH の商用利用)
OSS: DNSCrypt8
HPKE を説明した後にもう少し詳しく述べる。
4https://datatracker.ietf.org/doc/draft-ietf-tls-esni/
5ESNI (Encrypted Server Name Indication) とも呼ばれていた
6https://github.com/mlswg
7https://datatracker.ietf.org/doc/draft-pauly-dprive-oblivious-doh/
8https://dnscrypt.info
Jun Kurihara (Zettant) HPKE October 6, 2021 6 / 40
HPKE概略 (Draft 12ベース)
Jun Kurihara (Zettant) HPKE October 6, 2021 7 / 40
HPKE のビルディングブロック
HPKE は、(KEM, KDF, AEAD) の triplet でその構成を表す。9
KEM (Key Encapsulation Mechanism)
公開鍵暗号を使って、固定長の shared secret から固定長カプセル化情報
を生成、あるいはカプセル化情報から shared secret を復号するメカニズ
ム。後述する「モード」ごとに動作にバリエーションがある。
KDF (Key Derivation Function)
KEM で生成あるいは復号した shared secret を伸長・攪拌したりして、
AEAD で利用する擬似ランダム共通鍵を生成するメカニズム。
AEAD (Authenticated Encryption with Associated Data) 10
KDF で生成した鍵、および nonce、aad (Associated Data) を入力とした、
認証タグ付き共通鍵暗号化。AES-GCM 等が使われる。
9ex. (DHKEM(X25519, HKDF-SHA256), HKDF-SHA256, AES-128-GCM)、DHKEM は shared secret
生成で KDF を使う。“DH”KEM と言いながら ECDH による KEM なことに注意。
10
RFC5116 https://datatracker.ietf.org/doc/html/rfc5116
Jun Kurihara (Zettant) HPKE October 6, 2021 8 / 40
HPKE の「モード」
HPKE の利用モードとして、“Base”, “PSK (Pre-shared Key)”, “Auth”,
と PSK+Auth な “AuthPSK” の 4 モードが準備されている。
Base Mode
基本モード。AEAD での改竄検知のみで、送信者の認証はない。
PSK (Pre-Shared Key) Mode
送受信者で同じ PSK を共有しているかどうかを認証。
Auth (Authentication) Mode
送信者が KEM の Private Key を有していることを認証。11
AuthPSK Mode
PSK と Auth のメカニズムを両方利用。
11
Signcryption の一種と考えられる。
Jun Kurihara (Zettant) HPKE October 6, 2021 9 / 40
各モード共通の基本フロー
送信者・受信者共々、各モード共通の基本フローは次の通り。
1 “Encryption Context” オブジェクトを生成。Auth, PSK, AuthPSK のと
きは生成時の引数が増える。KEM と KDF を実行。
2 “Encryption Context” に格納される共通鍵で、暗号化もしくは復号。
つまり AEAD を実行。
Figure: HPKE のモード共通での基本フロー
Jun Kurihara (Zettant) HPKE October 6, 2021 10 / 40
モードの動作の違いは “Encryption Context” の生成方法の違いと考
えられる。このため、まずは各モードにおける “Encryption Context”
の生成について解説する。
Jun Kurihara (Zettant) HPKE October 6, 2021 11 / 40
HPKE Base モードの Context 生成
Figure: HPKE Base モードの Context 生成
Context 生成は、Encap/Decap の KEM 部分と、KeyScheduleS/R の KDF に
よる鍵スケジュール部分で構成される。
Jun Kurihara (Zettant) HPKE October 6, 2021 12 / 40
HPKE PSK モードの Context 生成
Figure: HPKE PSK モードの Context 生成
Base モードと比較し、KeySchedule において、PSK を使って
shared_secret を撹拌し、Context 内の鍵を生成する部分が異なる。
⇒ 送受信で PSK が異なれば、同じ Context が生成できない。
Jun Kurihara (Zettant) HPKE October 6, 2021 13 / 40
HPKE Auth モードの Context 生成
Figure: HPKE Auth モードの Context 生成
Base モードと比較し、Encap/Decap が、送信者の秘密鍵・公開鍵を追加
引数とする AuthEncap/AuthDecap に置き換わる部分が異なる。
⇒ 送受信で送信者の鍵ペアが正しい対でなければ、同じ Context が生成
できない
Jun Kurihara (Zettant) HPKE October 6, 2021 14 / 40
Encap/Decap の中身と AuthEncap/AuthDecap との違い
HPKE の現仕様では、ECDH+HDKF のみが KEM として考慮されているので、そ
れに則ってイメージを解説する。12
受信者の (公開鍵, 秘密鍵) の鍵ペアを
(𝑃𝐾𝑅, 𝑆𝐾𝑅)、送信者が作成する Ephemeral 鍵ペアを (𝑃𝐾𝐸, 𝑆𝐾𝐸) とする。この
とき、Base モードで shared_secret は以下のように生成される。
Encap: shared_secret = HKDF(ECDH(𝑆𝐾𝐸, 𝑃𝐾𝑅)),
Decap: shared_secret = HKDF(ECDH(𝑆𝐾𝑅, 𝑃𝐾𝐸)).
また、“enc” は Ephemeral 公開鍵 𝑃𝐾𝐸 となる。
一方 Auth モードでは、追加で送信者の鍵ペア (𝑃𝐾𝑆, 𝑆𝐾𝑆) を用いて、
AuthEncap: shared_secret = HKDF(ECDH(𝑆𝐾𝐸, 𝑃𝐾𝑅)||ECDH(𝑆𝐾𝑆, 𝑃𝐾𝑅)),
AuthDecap: shared_secret = HKDF(ECDH(𝑆𝐾𝑅, 𝑃𝐾𝐸)||ECDH(𝑆𝐾𝑅, 𝑃𝐾𝑆)).
すなわち、Ephemeral 鍵ペアと受信者の鍵ペアの ECDH、送信者の鍵ペアと受信
者の鍵ペアの ECDH、の結果を結合して HKDF を通したものを shared_secret
としている。よって、受信者があらかじめ受け取った 𝑃𝐾𝑆 に対して、正しく対
となる 𝑆𝐾𝑆 を持っていないと同一の shared_secret が生成できない。
12
細かなパラメータは省略しているので注意。
Jun Kurihara (Zettant) HPKE October 6, 2021 15 / 40
HPKE AuthPSK モードの Context 生成
Figure: HPKE AuthPSK モードの Context 生成
Auth モードと PSK モードの単純な組み合わせとなる。
Jun Kurihara (Zettant) HPKE October 6, 2021 16 / 40
データ自体の認証付暗号化・復号: HPKE AEAD
送受信者で Context を共有した後は、AEAD で暗号化・復号。
Figure: HPKE AEAD による暗号化・復号
上図の通り、Context オブジェクト内部で、インスタンス変数 Seq をイン
クリメントしながら、Seq を元にした Nonce を生成する。Nonce と Key
を用いて、与えられた aad および plaintext/ciphertext を合わせて暗号化・
復号する。
Jun Kurihara (Zettant) HPKE October 6, 2021 17 / 40
HPKE の Context 生成における KEM: DHKEM の場合
前述したが、現行のドラフトでは、KEM として DHKEM のみを規
定している。13ここでは、もう少し詳細に図解する。
13将来的には異なるアルゴリズムも採用できるようになっている。
Jun Kurihara (Zettant) HPKE October 6, 2021 18 / 40
Encap/Decap の構造を以下に示す。shared_secret を生成するに
あたり、Ephemeral & Receiver 公開鍵をある意味「ラベル」として
用いて、ECDH で導出した bits と合わせて KDF を実行している。
Generate randomized
EC Key Pair
Ephemeral Key Pair
“shared_secret”
PublicKey
PrivateKey
Given as an
encapsulated
shared_secret “enc”
Receiver
PublicKey
ECDH DeriveBits
Derived Bits
KDF for ECDH
(Extract&Expand)
Serialize&Concat
As “info”
Encap
“shared_secret”
Ephemeral
PublicKey
Receiver
PrivateKey
ECDH DeriveBits
Derived Bits
KDF for ECDH
(Extract&Expand)
Serialize&Concat
As “info”
Decap
Receiver
PublicKey
Derive PublicKey
Figure: DHKEM Encap/Decap の構成
Jun Kurihara (Zettant) HPKE October 6, 2021 19 / 40
AuthEncap/AuthDecap の構造を以下に示す。Encap/Decap に対し
て、
「ラベル」生成のために Sender 公開鍵を利用しつつ、ECDH 導
出 bits を追加して KDF への入力を増やしている点が異なる。
Generate
EC Key Pair
Ephemeral Key Pair
“shared_secret”
PublicKey
PrivateKey
Given as an
encapsulated
shared_secret “enc”
Receiver
PublicKey
ECDH
DeriveBits
Derived Bits
KDF for ECDH
(Extract&Expand)
Serialize&Concat
As “info”
AuthEncap
“shared_secret”
Ephemeral
PublicKey
Receiver
PrivateKey
KDF for ECDH
(Extract&Expand)
Serialize&Concat
As “info”
AuthDecap
Receiver
PublicKey
Derive PublicKey
Sender
PrivateKey
Derive
PublicKey
ECDH
DeriveBits
Concat
Sender
PublicKey
Derived Bits
Sender
PublicKey
ECDH
DeriveBits
Derived Bits
ECDH
DeriveBits
Concat
Derived Bits
Figure: DHKEM AuthEncap/AuthDecap の構成
Jun Kurihara (Zettant) HPKE October 6, 2021 20 / 40
HPKE のセキュリティ
HPKE で、ざっと担保されるセキュリティ事項は以下の通り。14
IND-CCA2: AEAD を使うことで選択暗号文攻撃 (Chosen
Ciphertext Attack) に対して安全
PSK, Auth, AuthPSK モードによる送信者認証
14Secret export に対する indistinguishability もあるが今回はその解説は省略。
Jun Kurihara (Zettant) HPKE October 6, 2021 21 / 40
HPKE は、その構成上、以下の制限事項が存在する。
Receiver Key Pair は Ephemeral ではないため、受信者が Compromise
されることについて、Perfect Forward Secrecy を担保しない。
Base/Auth モードでは受信者の秘密鍵が Compromise されてい
ないこと、PSK/AuthPSK モードでは受信者の秘密鍵と PSK が
Compromise されていないことが必須条件である。
万一の場合に被害を拡大させないためには、受信者が頻繁に鍵
ペアを更新・公開するなどで暫定対処するしかない15
PSK, Auth, AuthPSK における送信者認証は、常に Sender Private Key
および PSK が Compromise されていないことが条件。(当然と言え
ば当然)
耐量子: 現行の DHKEM では量子コンピュータに対して脆弱なため、
将来的に Context 生成は耐量子公開鍵暗号を規格化する必要性があ
る。また、Auth モード等での量子コンピュータに対するセキュリ
ティ性能は未証明。
15Cloudflare が寄与した ODoH の実装では 1 日 1 回ローテートさせている。
https://github.com/DNSCrypt/doh-server
Jun Kurihara (Zettant) HPKE October 6, 2021 22 / 40
Draft 12 で利用可能な KEM, KDF, AEAD のパラメタ一覧
概略解説の最後に、Draft 12 で規定される KEM,KDF,AEAD を一覧する
KEM (DHKEM(_curve_, _kdf_))
- DHKEM(X2551916
, HKDF-SHA256)
- DHKEM(X44817
, HKDF-SHA512)
- DHKEM(P-256, HDKF-SHA256)
- DHKEM(P-384, HKDF-SHA384)
- DHKEM(P-521, HDKF-SHA512)
KDF
- HKDF-SHA256
- HKDF-SHA384
- HDKF-SHA512
AEAD
- AES-128-GCM
- AES-128-GCM
- ChaCha20Poly130518
16
RFC7748
17
RFC7748
18
RFC8439
Jun Kurihara (Zettant) HPKE October 6, 2021 23 / 40
HPKE応用:
TLS Encrypted Client Hello
Jun Kurihara (Zettant) HPKE October 6, 2021 24 / 40
TLS における Encrypted Client Hello (ECH)
HPKE の応用箇所として、IETF TLSWG で検討が進んでい
る19Encrypted Client Hello (ECH)20について簡単に紹介する。
Client Hello
TLS サーバに繋ぎに行く際、接続したい FQDN や接続可能な L7 プ
ロトコル情報 (ALPN21
) を入れてクライアントが最初に投げるメッ
セージ。
19https://datatracker.ietf.org/doc/draft-ietf-tls-esni/
20ECH は過去には Encrypted Server Name Indication (ESNI) と呼ばれていた。
21
Application Layer Protocol Negotiation
Jun Kurihara (Zettant) HPKE October 6, 2021 25 / 40
Client Hello の脆弱性
TLS1.3 では、ClientHello より後にやり取りされるメッセージは全
て暗号化されたが、Client Hello 自身は平文のまま。
Client
TLS (HTTPS)
Server
DoH
Server
HTTPS
Secure
Channel
1) ClientHello <FQDN: www.zettant.com, ALPN:…>
Even if the FQDN is
securely hidden in the
phase of DNS query…
2) TLS negotiation is all encrypted after ClientHello.
The FQDN and other sensitive
information are visible in ClientHello!!!
0) Query DNS RR
for the target
FQDN
Figure: ClientHello からアクセス先の情報が漏れる
たとえ DNS のやりとりを暗号化しても、ClientHello を盗聴されれ
ばアクセス先が漏洩してしまう。
Jun Kurihara (Zettant) HPKE October 6, 2021 26 / 40
ECH: TLS ネゴシエーションを全部暗号化
Client Hello から全てネゴシエーションを暗号化してしまおう!
⇒ ECH。そしてその実現のために HPKE を応用。
Client
TLS (HTTPS)
Server
DoH
Server
HTTPS
Secure
Channel
Encrypted ClientHello by HPKE
All messages in TLS negotiation
are totally encrypted.
Fetch DNS records of
- IP Address of the
server
(A/AAAA record)
- “HPKE Public Key”
(HTTPS record)
Figure: DNS HTTPS レコードを利用した Encrypted Client Hello 概略
HPKE の Receiver (サーバ) Public Key 他を含む Config は、DNS の新設レ
コード “HTTPS” (Type65) に記述することが検討されている。22
22Optional であり、事前に端末に埋め込むなど、他の手法で取得しても良い。
Jun Kurihara (Zettant) HPKE October 6, 2021 27 / 40
HPKE実装を触ってみる
Jun Kurihara (Zettant) HPKE October 6, 2021 28 / 40
現行使える HPKE のライブラリ (抜粋)
2021-10-1 時点で、Go/Rust/C (openSSL)/C++ (OpenSSL) ら低級言
語中心で、HPKE のライブラリが実装されている。23
栗原が HPKE の利用シーンでよく見かけるのは以下のあたり:
- Cloudflare ODoH 実装で利用:
Rust: https://github.com/rozbb/rust-hpke
Go: https://github.com/cisco/go-hpke
- dnscrypt 実装で利用:
Go: https://github.com/jedisct1/go-hpke-compact
今回は、Go のライブラリのテストコードを動作させて暗号化・復
号を追いつつ、Base モードでの動作フローを解説する。
23CFRG のリポジトリを参照: https://github.com/cfrg/draft-irtf-cfrg-hpke
Jun Kurihara (Zettant) HPKE October 6, 2021 29 / 40
環境準備: Golang
Golang をインストール済みのこと24
栗原の環境
$ go version
go version go1.17.1 darwin/arm64
今回は hpke-compact25で動作を追ってみる。学習のためには他の
言語・ライブラリも試すのを推奨する。
ライブラリの準備・依存パッケージのダウンロード 26
$ git clone https://github.com/jedisct1/go-hpke-compact
$ cd go-hpke-compact
$ go install *.go
24Mac/Linux を想定。Zsh/Bash 等でパスが通っている前提。
25https://github.com/jedisct1/go-hpke-compact
26
test コードの依存パッケージは indirect なので直接 ∗.go ファイルでパッケージダウンロード
Jun Kurihara (Zettant) HPKE October 6, 2021 30 / 40
Go で HPKE を試す
まずはテストコードを動かしてみる
$ go test -v
=== RUN TestExchange
--- PASS: TestExchange (0.00s)
=== RUN TestAuthenticatedExchange
--- PASS: TestAuthenticatedExchange (0.00s)
=== RUN TestVectors
--- PASS: TestVectors (0.00s)
=== RUN TestExportOnly
--- PASS: TestExportOnly (0.00s)
PASS
checks: 0 passed 0 todo 0 failed (total)
ok github.com/jedisct1/go-hpke-compact 0.113s
- TestExchange: Base モード (PSK モード) での一連の動作テスト
- TestAuthenticatedExchange: 同様に Auth モード (AuthdPSK モード)
- TestVectors: test vector による出力チェック
- TestExportOnly: secret export のテスト
Jun Kurihara (Zettant) HPKE October 6, 2021 31 / 40
今回は、基本となる Base モード (引数次第で PSK モードを兼ねる) の動
作テスト (TestExchange) の中身を追って、HPKE のやり取りの理解を深
める。
1. Triplet 指定による HPKE 設定初期化
hpke_test.go: TestExchange
suite, err := NewSuite(KemX25519HkdfSha256, KdfHkdfSha256, AeadAes128Gcm)
if err != nil {
t.Fatal(err)
}
前述したように、(KEM, KDF, AEAD) の triplet で HPKE の設定を表す。上
記テストコードでは、triplet の各要素として
KEM: DHKEM(X25519 + HKDF-SHA256)
KDF: HKDF-SHA256
AEAD: AES128-GCM
を利用して HPKE Suite のオブジェクトを生成している。Sender/Receiver
の両者で実行。
Jun Kurihara (Zettant) HPKE October 6, 2021 32 / 40
2@Receiver(Server). Receiver Key Pair を生成
hpke_test.go: TestExchange
serverKp, err := suite.GenerateKeyPair()
if err != nil {
t.Fatal(err)
}
suite オブジェクトを生成する際に X25519 を KEM で利用すると指定して
いる。このため、serverKp として、X25519 の鍵ペアを生成。
ここで生成した鍵ペアの公開鍵 serverKp.PublicKey オブジェクトを、
Sender(Client) になんらかの方法で渡しておく。
Jun Kurihara (Zettant) HPKE October 6, 2021 33 / 40
3@Sender(Client). Sender の EncryptionContext と “enc” を生成
hpke_test.go: TestExchange
clientCtx, encryptedSharedSecret, err := suite.NewClientContext(
serverKp.PublicKey, // 受け取った公開鍵
[]byte("test"), // info (App 名など)
nil // PSK モードの時は PSK オブジェクトを入れる
)
if err != nil {
t.Fatal(err)
}
生成した Context: clientCtx はクライアントで保持。のちに AEAD 暗号
化で利用。
一方、同時に生成する “enc”: encryptedSharedSecret オブジェクトは、
Receiver(Server) になんらかの方法で渡しておく。AEAD 暗号化データと
一緒に渡しても良い。
Jun Kurihara (Zettant) HPKE October 6, 2021 34 / 40
4@Sender(Client). AEAD 暗号化データの生成
hpke_test.go: TestExchange
ciphertext, err := clientCtx.EncryptToServer(
[]byte("message"), // 暗号化対象データ。string を byte にしている。
nil // aad (optional)
)
if err != nil {
t.Fatal(err)
}
ciphertext を Receiver(Server) へ送付。AEAD 暗号化の Nonce は、前述
のように、Context 内部の変数を元に生成されているので意識しなくて
良い。
Jun Kurihara (Zettant) HPKE October 6, 2021 35 / 40
5@Receiver(Server). Receiver の EncryptionContext を生成
hpke_test.go: TestExchange
serverCtx, err := suite.NewServerContext(
encryptedSharedSecret, // 受け取った ‘‘enc’’、実態は Ephemeral 公開鍵
serverKp, // 1. で生成した Receiver Key Pair
[]byte("test"), // info (App 名など)、sender 側の記述と一致が必須
nil // PSK モードの時は PSK オブジェクトを入れる
)
if err != nil {
t.Fatal(err)
}
Sender(Client) から受け取った “enc” を用いて、Sender と同じ
EncryptionContext を生成する。
Jun Kurihara (Zettant) HPKE October 6, 2021 36 / 40
6@Receiver(Server). AEAD 復号
hpke_test.go: TestExchange
decrypted, err := serverCtx.DecryptFromClient(
ciphertext, // AEAD 暗号化データ
nil // aad (Optional)、暗号化時と同じものである必要
)
if err != nil {
t.Fatal(err)
}
Receiver(Server) の context を用いて復号。
Jun Kurihara (Zettant) HPKE October 6, 2021 37 / 40
Sender → Receiver への暗号化データ送付について説明したが、共
有した context を使いまわしてその後の「Response」としての
Receiver(Server) から Sender(Clident) への暗号化データ送付も可能。
7@Receiver(Server)→Sender(Client). 応答の暗号化・復号
hpke_test.go: TestExchange
// サーバでの AEAD 暗号化
ciphertext, err = serverCtx.EncryptToClient([]byte("response"), nil)
if err != nil {
t.Fatal(err)
}
// クライアントでの AEAD 復号
decrypted, err = clientCtx.DecryptFromServer(ciphertext, nil)
if err != nil {
t.Fatal(err)
}
Jun Kurihara (Zettant) HPKE October 6, 2021 38 / 40
まとめ
Jun Kurihara (Zettant) HPKE October 6, 2021 39 / 40
まとめ
HPKE の概略を紹介した
HPKE の応用: ECH を紹介した
HPKE の実装、テストコードを解説した
HPKE という規格は、今後さまざまな箇所の E2E 暗号化に応用が
期待できる。多分押さえておいて損はない。
Jun Kurihara (Zettant) HPKE October 6, 2021 40 / 40

Weitere ähnliche Inhalte

Was ist angesagt?

SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)Naohiro Fujie
 
IDA,VC,DID関連仕様 最新情報 - OpenID BizDay #15
IDA,VC,DID関連仕様 最新情報 - OpenID BizDay #15IDA,VC,DID関連仕様 最新情報 - OpenID BizDay #15
IDA,VC,DID関連仕様 最新情報 - OpenID BizDay #15OpenID Foundation Japan
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014Nov Matake
 
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ SEGADevTech
 
Kongの概要と導入事例
Kongの概要と導入事例Kongの概要と導入事例
Kongの概要と導入事例briscola-tokyo
 
Tanzu Mission Control における Open Policy Agent (OPA) の利用
Tanzu Mission Control における Open Policy Agent (OPA) の利用Tanzu Mission Control における Open Policy Agent (OPA) の利用
Tanzu Mission Control における Open Policy Agent (OPA) の利用Motonori Shindo
 
今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified IDNaohiro Fujie
 
KeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについてKeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについてHiroyuki Wada
 
Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --
Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --
Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --Jun Kurihara
 
ネットワークでなぜ遅延が生じるのか
ネットワークでなぜ遅延が生じるのかネットワークでなぜ遅延が生じるのか
ネットワークでなぜ遅延が生じるのかJun Kato
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門Hiroyuki Wada
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話Kazuho Oku
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向shigeki_ohtsu
 
PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点 PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点 zaki4649
 
徳丸本に載っていないWebアプリケーションセキュリティ
徳丸本に載っていないWebアプリケーションセキュリティ徳丸本に載っていないWebアプリケーションセキュリティ
徳丸本に載っていないWebアプリケーションセキュリティHiroshi Tokumaru
 
YAPC::Tokyo 2013 ritou OpenID Connect
YAPC::Tokyo 2013 ritou OpenID ConnectYAPC::Tokyo 2013 ritou OpenID Connect
YAPC::Tokyo 2013 ritou OpenID ConnectRyo Ito
 

Was ist angesagt? (20)

SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)SSIとDIDで何を解決したいのか?(β版)
SSIとDIDで何を解決したいのか?(β版)
 
IDA,VC,DID関連仕様 最新情報 - OpenID BizDay #15
IDA,VC,DID関連仕様 最新情報 - OpenID BizDay #15IDA,VC,DID関連仕様 最新情報 - OpenID BizDay #15
IDA,VC,DID関連仕様 最新情報 - OpenID BizDay #15
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
 
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~ CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~
 
Kongの概要と導入事例
Kongの概要と導入事例Kongの概要と導入事例
Kongの概要と導入事例
 
Tanzu Mission Control における Open Policy Agent (OPA) の利用
Tanzu Mission Control における Open Policy Agent (OPA) の利用Tanzu Mission Control における Open Policy Agent (OPA) の利用
Tanzu Mission Control における Open Policy Agent (OPA) の利用
 
今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID今なら間に合う分散型IDとEntra Verified ID
今なら間に合う分散型IDとEntra Verified ID
 
KeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについてKeycloakのDevice Flow、CIBAについて
KeycloakのDevice Flow、CIBAについて
 
Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --
Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --
Modern Authentication -- FIDO2 Web Authentication (WebAuthn) を学ぶ --
 
ネットワークでなぜ遅延が生じるのか
ネットワークでなぜ遅延が生じるのかネットワークでなぜ遅延が生じるのか
ネットワークでなぜ遅延が生じるのか
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
 
FIDO認証によるパスワードレスログイン実装入門
FIDO認証によるパスワードレスログイン実装入門FIDO認証によるパスワードレスログイン実装入門
FIDO認証によるパスワードレスログイン実装入門
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向
 
PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点 PenTesterが知っている危ないAWS環境の共通点
PenTesterが知っている危ないAWS環境の共通点
 
Vue.js で XSS
Vue.js で XSSVue.js で XSS
Vue.js で XSS
 
徳丸本に載っていないWebアプリケーションセキュリティ
徳丸本に載っていないWebアプリケーションセキュリティ徳丸本に載っていないWebアプリケーションセキュリティ
徳丸本に載っていないWebアプリケーションセキュリティ
 
YAPC::Tokyo 2013 ritou OpenID Connect
YAPC::Tokyo 2013 ritou OpenID ConnectYAPC::Tokyo 2013 ritou OpenID Connect
YAPC::Tokyo 2013 ritou OpenID Connect
 
Paxos
PaxosPaxos
Paxos
 

Ähnlich wie Hybrid Public Key Encryption (HPKE)

図解で理解するvetKD
図解で理解するvetKD図解で理解するvetKD
図解で理解するvetKDryoo toku
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)NTT DATA Technology & Innovation
 
OAuthのHolder of Key Token
OAuthのHolder of Key TokenOAuthのHolder of Key Token
OAuthのHolder of Key TokenYuichi Nakamura
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021Preferred Networks
 
1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud
1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud
1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloudNaoto Gohko
 
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)NTT DATA Technology & Innovation
 
WebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocketWebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocketYu Nobuoka
 
Docker 基本のおさらい
Docker 基本のおさらいDocker 基本のおさらい
Docker 基本のおさらいNaoki Nagazumi
 
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"Masaya Aoyama
 
Docker 18.09 新機能
Docker 18.09 新機能Docker 18.09 新機能
Docker 18.09 新機能Akihiro Suda
 
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術までAkihiro Suda
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 
SolidFire を Kibana(ELK Stack)で可視化(需要予測)する
SolidFire を Kibana(ELK Stack)で可視化(需要予測)するSolidFire を Kibana(ELK Stack)で可視化(需要予測)する
SolidFire を Kibana(ELK Stack)で可視化(需要予測)するKensuke Maeda
 
Osc2017 tokyo spring_soss_sig
Osc2017 tokyo spring_soss_sigOsc2017 tokyo spring_soss_sig
Osc2017 tokyo spring_soss_sigKazuki Omo
 
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加するWindows コンテナを AKS に追加する
Windows コンテナを AKS に追加するYuto Takei
 
PEZY-SC programming overview
PEZY-SC programming overviewPEZY-SC programming overview
PEZY-SC programming overviewRyo Sakamoto
 
IETF96 Update oauth tokbind
IETF96 Update oauth tokbindIETF96 Update oauth tokbind
IETF96 Update oauth tokbindKaoru Maeda
 

Ähnlich wie Hybrid Public Key Encryption (HPKE) (20)

図解で理解するvetKD
図解で理解するvetKD図解で理解するvetKD
図解で理解するvetKD
 
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
Apache Spark on Kubernetes入門(Open Source Conference 2021 Online Hiroshima 発表資料)
 
OAuthのHolder of Key Token
OAuthのHolder of Key TokenOAuthのHolder of Key Token
OAuthのHolder of Key Token
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 
1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud
1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud
1st OCDET Baremetal MTG OpenStack baremetal compute by GMO AppsCloud
 
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
 
[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005
 
WebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocketWebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocket
 
Docker 基本のおさらい
Docker 基本のおさらいDocker 基本のおさらい
Docker 基本のおさらい
 
hbstudy37 doc
hbstudy37 dochbstudy37 doc
hbstudy37 doc
 
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
On-premise コンテナ基盤と Hardware LB を使った "type LoadBalancer"
 
Docker 18.09 新機能
Docker 18.09 新機能Docker 18.09 新機能
Docker 18.09 新機能
 
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
SolidFire を Kibana(ELK Stack)で可視化(需要予測)する
SolidFire を Kibana(ELK Stack)で可視化(需要予測)するSolidFire を Kibana(ELK Stack)で可視化(需要予測)する
SolidFire を Kibana(ELK Stack)で可視化(需要予測)する
 
Osc2017 tokyo spring_soss_sig
Osc2017 tokyo spring_soss_sigOsc2017 tokyo spring_soss_sig
Osc2017 tokyo spring_soss_sig
 
Windows コンテナを AKS に追加する
Windows コンテナを AKS に追加するWindows コンテナを AKS に追加する
Windows コンテナを AKS に追加する
 
PEZY-SC programming overview
PEZY-SC programming overviewPEZY-SC programming overview
PEZY-SC programming overview
 
IETF96 Update oauth tokbind
IETF96 Update oauth tokbindIETF96 Update oauth tokbind
IETF96 Update oauth tokbind
 
Jap1
Jap1Jap1
Jap1
 

Mehr von Jun Kurihara

植松友彦先生 著 「研究読本」の2022年バージョン副読本
植松友彦先生 著 「研究読本」の2022年バージョン副読本植松友彦先生 著 「研究読本」の2022年バージョン副読本
植松友彦先生 著 「研究読本」の2022年バージョン副読本Jun Kurihara
 
Mutualized Oblivious DNS (μODNS): Hiding a tree in the wild forest
Mutualized Oblivious DNS (μODNS): Hiding a tree in the wild forestMutualized Oblivious DNS (μODNS): Hiding a tree in the wild forest
Mutualized Oblivious DNS (μODNS): Hiding a tree in the wild forestJun Kurihara
 
DNS におけるセキュリティ&プライバシ動向
DNS におけるセキュリティ&プライバシ動向DNS におけるセキュリティ&プライバシ動向
DNS におけるセキュリティ&プライバシ動向Jun Kurihara
 
JavaScriptを使って学ぶEnd-to-Endセキュリティ Appendix
JavaScriptを使って学ぶEnd-to-Endセキュリティ AppendixJavaScriptを使って学ぶEnd-to-Endセキュリティ Appendix
JavaScriptを使って学ぶEnd-to-Endセキュリティ AppendixJun Kurihara
 
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第4回
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第4回JavaScriptを使って学ぶEnd-to-Endセキュリティ 第4回
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第4回Jun Kurihara
 
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第3回
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第3回JavaScriptを使って学ぶEnd-to-Endセキュリティ 第3回
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第3回Jun Kurihara
 
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第2回
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第2回JavaScriptを使って学ぶEnd-to-Endセキュリティ 第2回
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第2回Jun Kurihara
 
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第1回
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第1回JavaScriptを使って学ぶEnd-to-Endセキュリティ 第1回
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第1回Jun Kurihara
 

Mehr von Jun Kurihara (8)

植松友彦先生 著 「研究読本」の2022年バージョン副読本
植松友彦先生 著 「研究読本」の2022年バージョン副読本植松友彦先生 著 「研究読本」の2022年バージョン副読本
植松友彦先生 著 「研究読本」の2022年バージョン副読本
 
Mutualized Oblivious DNS (μODNS): Hiding a tree in the wild forest
Mutualized Oblivious DNS (μODNS): Hiding a tree in the wild forestMutualized Oblivious DNS (μODNS): Hiding a tree in the wild forest
Mutualized Oblivious DNS (μODNS): Hiding a tree in the wild forest
 
DNS におけるセキュリティ&プライバシ動向
DNS におけるセキュリティ&プライバシ動向DNS におけるセキュリティ&プライバシ動向
DNS におけるセキュリティ&プライバシ動向
 
JavaScriptを使って学ぶEnd-to-Endセキュリティ Appendix
JavaScriptを使って学ぶEnd-to-Endセキュリティ AppendixJavaScriptを使って学ぶEnd-to-Endセキュリティ Appendix
JavaScriptを使って学ぶEnd-to-Endセキュリティ Appendix
 
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第4回
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第4回JavaScriptを使って学ぶEnd-to-Endセキュリティ 第4回
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第4回
 
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第3回
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第3回JavaScriptを使って学ぶEnd-to-Endセキュリティ 第3回
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第3回
 
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第2回
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第2回JavaScriptを使って学ぶEnd-to-Endセキュリティ 第2回
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第2回
 
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第1回
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第1回JavaScriptを使って学ぶEnd-to-Endセキュリティ 第1回
JavaScriptを使って学ぶEnd-to-Endセキュリティ 第1回
 

Kürzlich hochgeladen

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 

Kürzlich hochgeladen (11)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

Hybrid Public Key Encryption (HPKE)

  • 1. Hybrid Public Key Encryption (HPKE) 栗原 淳 株式会社ゼタント 兵庫県立大学大学院 ATR October 6, 2021 Jun Kurihara (Zettant) HPKE October 6, 2021 1 / 40
  • 2. はじめに Jun Kurihara (Zettant) HPKE October 6, 2021 2 / 40
  • 3. この資料は 2019 年に IETF においてドラフト提案、2021 年現在において標準化が進 んでいる、Hybrid Public Key Encryption (HPKE)という規格について、栗 原自身の理解を深めるとともに、技術者にざっくり解説することを目的 とする。 HPKE の IETF 標準化状況 (2021-10-01 時点で draft 12) IETF: https://datatracker.ietf.org/doc/draft-irtf-cfrg-hpke/ GitHub: https://github.com/cfrg/draft-irtf-cfrg-hpke 本講義資料では、ある程度の前提知識を要求する。栗原の別の講義資料1 を参照しておくと良いだろう。 1https://github.com/junkurihara/lecture-security_engineering の 2∼6 回目あたり。 Jun Kurihara (Zettant) HPKE October 6, 2021 3 / 40
  • 4. HPKE をざっくり言うと Hybrid Public Key Encryption という「規格」 古典的な認証機能付きハイブリッド暗号化のフォーマット規定と いう位置付け、と思って良い。サポート性、再利用性、将来的な 拡張性を高める目的で策定されている。 任意長のデータを、受信者の公開鍵2使って暗号化 将来的に耐量子公開鍵暗号をサポートすることも想定 2現状では楕円曲線暗号の公開鍵のみ (i.e., ECDH) Jun Kurihara (Zettant) HPKE October 6, 2021 4 / 40
  • 5. Receiver (Server) Public Key Private Key Sender (Client) Public Key Private Key ECDH + HKDF ECDH + HKDF Content Key AES-GCM AES-GCM Encrypted & Authenticated Decrypted & Verified Figure: ECDH+HKDF+AES-GCM によるハイブリッド暗号化イメージ 上図のようなハイブリッド暗号化のプロトコル、鍵フォーマット、 暗号化データのフォーマットなどを一定に定めて、HPKE を策定。 ⇒ 今までバラバラだったハイブリッド暗号化プロトコルが統一さ れ、複数環境での相互接続性が担保される。3 3例: 言語によって異なるライブラリを使っていても、データは同様に扱えるように。JavaScript (WebCrypto) と C (OpenSSL) で統一されたハイブリッド暗号化ライブラリが用意されたり (すると良 いけど JS 向けは今の所自分で作るしかない)。 Jun Kurihara (Zettant) HPKE October 6, 2021 5 / 40
  • 6. HPKE の応用事例 HPKE はまだその規格は IETF RFC のドラフトであるが、既に別の IETF RFC ドラフトや商用サービス、Open Source Software (OSS) で利用されている。 例: RFC ドラフト: TLS Encrypted Client Hello (ECH)45 RFC ドラフト: Messaging Layer Security (MLS)6 RFC ドラフト: Oblivious DNS over HTTS (ODoH)7 Apple iCloud+ Private Relay (ODoH の商用利用) OSS: DNSCrypt8 HPKE を説明した後にもう少し詳しく述べる。 4https://datatracker.ietf.org/doc/draft-ietf-tls-esni/ 5ESNI (Encrypted Server Name Indication) とも呼ばれていた 6https://github.com/mlswg 7https://datatracker.ietf.org/doc/draft-pauly-dprive-oblivious-doh/ 8https://dnscrypt.info Jun Kurihara (Zettant) HPKE October 6, 2021 6 / 40
  • 7. HPKE概略 (Draft 12ベース) Jun Kurihara (Zettant) HPKE October 6, 2021 7 / 40
  • 8. HPKE のビルディングブロック HPKE は、(KEM, KDF, AEAD) の triplet でその構成を表す。9 KEM (Key Encapsulation Mechanism) 公開鍵暗号を使って、固定長の shared secret から固定長カプセル化情報 を生成、あるいはカプセル化情報から shared secret を復号するメカニズ ム。後述する「モード」ごとに動作にバリエーションがある。 KDF (Key Derivation Function) KEM で生成あるいは復号した shared secret を伸長・攪拌したりして、 AEAD で利用する擬似ランダム共通鍵を生成するメカニズム。 AEAD (Authenticated Encryption with Associated Data) 10 KDF で生成した鍵、および nonce、aad (Associated Data) を入力とした、 認証タグ付き共通鍵暗号化。AES-GCM 等が使われる。 9ex. (DHKEM(X25519, HKDF-SHA256), HKDF-SHA256, AES-128-GCM)、DHKEM は shared secret 生成で KDF を使う。“DH”KEM と言いながら ECDH による KEM なことに注意。 10 RFC5116 https://datatracker.ietf.org/doc/html/rfc5116 Jun Kurihara (Zettant) HPKE October 6, 2021 8 / 40
  • 9. HPKE の「モード」 HPKE の利用モードとして、“Base”, “PSK (Pre-shared Key)”, “Auth”, と PSK+Auth な “AuthPSK” の 4 モードが準備されている。 Base Mode 基本モード。AEAD での改竄検知のみで、送信者の認証はない。 PSK (Pre-Shared Key) Mode 送受信者で同じ PSK を共有しているかどうかを認証。 Auth (Authentication) Mode 送信者が KEM の Private Key を有していることを認証。11 AuthPSK Mode PSK と Auth のメカニズムを両方利用。 11 Signcryption の一種と考えられる。 Jun Kurihara (Zettant) HPKE October 6, 2021 9 / 40
  • 10. 各モード共通の基本フロー 送信者・受信者共々、各モード共通の基本フローは次の通り。 1 “Encryption Context” オブジェクトを生成。Auth, PSK, AuthPSK のと きは生成時の引数が増える。KEM と KDF を実行。 2 “Encryption Context” に格納される共通鍵で、暗号化もしくは復号。 つまり AEAD を実行。 Figure: HPKE のモード共通での基本フロー Jun Kurihara (Zettant) HPKE October 6, 2021 10 / 40
  • 11. モードの動作の違いは “Encryption Context” の生成方法の違いと考 えられる。このため、まずは各モードにおける “Encryption Context” の生成について解説する。 Jun Kurihara (Zettant) HPKE October 6, 2021 11 / 40
  • 12. HPKE Base モードの Context 生成 Figure: HPKE Base モードの Context 生成 Context 生成は、Encap/Decap の KEM 部分と、KeyScheduleS/R の KDF に よる鍵スケジュール部分で構成される。 Jun Kurihara (Zettant) HPKE October 6, 2021 12 / 40
  • 13. HPKE PSK モードの Context 生成 Figure: HPKE PSK モードの Context 生成 Base モードと比較し、KeySchedule において、PSK を使って shared_secret を撹拌し、Context 内の鍵を生成する部分が異なる。 ⇒ 送受信で PSK が異なれば、同じ Context が生成できない。 Jun Kurihara (Zettant) HPKE October 6, 2021 13 / 40
  • 14. HPKE Auth モードの Context 生成 Figure: HPKE Auth モードの Context 生成 Base モードと比較し、Encap/Decap が、送信者の秘密鍵・公開鍵を追加 引数とする AuthEncap/AuthDecap に置き換わる部分が異なる。 ⇒ 送受信で送信者の鍵ペアが正しい対でなければ、同じ Context が生成 できない Jun Kurihara (Zettant) HPKE October 6, 2021 14 / 40
  • 15. Encap/Decap の中身と AuthEncap/AuthDecap との違い HPKE の現仕様では、ECDH+HDKF のみが KEM として考慮されているので、そ れに則ってイメージを解説する。12 受信者の (公開鍵, 秘密鍵) の鍵ペアを (𝑃𝐾𝑅, 𝑆𝐾𝑅)、送信者が作成する Ephemeral 鍵ペアを (𝑃𝐾𝐸, 𝑆𝐾𝐸) とする。この とき、Base モードで shared_secret は以下のように生成される。 Encap: shared_secret = HKDF(ECDH(𝑆𝐾𝐸, 𝑃𝐾𝑅)), Decap: shared_secret = HKDF(ECDH(𝑆𝐾𝑅, 𝑃𝐾𝐸)). また、“enc” は Ephemeral 公開鍵 𝑃𝐾𝐸 となる。 一方 Auth モードでは、追加で送信者の鍵ペア (𝑃𝐾𝑆, 𝑆𝐾𝑆) を用いて、 AuthEncap: shared_secret = HKDF(ECDH(𝑆𝐾𝐸, 𝑃𝐾𝑅)||ECDH(𝑆𝐾𝑆, 𝑃𝐾𝑅)), AuthDecap: shared_secret = HKDF(ECDH(𝑆𝐾𝑅, 𝑃𝐾𝐸)||ECDH(𝑆𝐾𝑅, 𝑃𝐾𝑆)). すなわち、Ephemeral 鍵ペアと受信者の鍵ペアの ECDH、送信者の鍵ペアと受信 者の鍵ペアの ECDH、の結果を結合して HKDF を通したものを shared_secret としている。よって、受信者があらかじめ受け取った 𝑃𝐾𝑆 に対して、正しく対 となる 𝑆𝐾𝑆 を持っていないと同一の shared_secret が生成できない。 12 細かなパラメータは省略しているので注意。 Jun Kurihara (Zettant) HPKE October 6, 2021 15 / 40
  • 16. HPKE AuthPSK モードの Context 生成 Figure: HPKE AuthPSK モードの Context 生成 Auth モードと PSK モードの単純な組み合わせとなる。 Jun Kurihara (Zettant) HPKE October 6, 2021 16 / 40
  • 17. データ自体の認証付暗号化・復号: HPKE AEAD 送受信者で Context を共有した後は、AEAD で暗号化・復号。 Figure: HPKE AEAD による暗号化・復号 上図の通り、Context オブジェクト内部で、インスタンス変数 Seq をイン クリメントしながら、Seq を元にした Nonce を生成する。Nonce と Key を用いて、与えられた aad および plaintext/ciphertext を合わせて暗号化・ 復号する。 Jun Kurihara (Zettant) HPKE October 6, 2021 17 / 40
  • 18. HPKE の Context 生成における KEM: DHKEM の場合 前述したが、現行のドラフトでは、KEM として DHKEM のみを規 定している。13ここでは、もう少し詳細に図解する。 13将来的には異なるアルゴリズムも採用できるようになっている。 Jun Kurihara (Zettant) HPKE October 6, 2021 18 / 40
  • 19. Encap/Decap の構造を以下に示す。shared_secret を生成するに あたり、Ephemeral & Receiver 公開鍵をある意味「ラベル」として 用いて、ECDH で導出した bits と合わせて KDF を実行している。 Generate randomized EC Key Pair Ephemeral Key Pair “shared_secret” PublicKey PrivateKey Given as an encapsulated shared_secret “enc” Receiver PublicKey ECDH DeriveBits Derived Bits KDF for ECDH (Extract&Expand) Serialize&Concat As “info” Encap “shared_secret” Ephemeral PublicKey Receiver PrivateKey ECDH DeriveBits Derived Bits KDF for ECDH (Extract&Expand) Serialize&Concat As “info” Decap Receiver PublicKey Derive PublicKey Figure: DHKEM Encap/Decap の構成 Jun Kurihara (Zettant) HPKE October 6, 2021 19 / 40
  • 20. AuthEncap/AuthDecap の構造を以下に示す。Encap/Decap に対し て、 「ラベル」生成のために Sender 公開鍵を利用しつつ、ECDH 導 出 bits を追加して KDF への入力を増やしている点が異なる。 Generate EC Key Pair Ephemeral Key Pair “shared_secret” PublicKey PrivateKey Given as an encapsulated shared_secret “enc” Receiver PublicKey ECDH DeriveBits Derived Bits KDF for ECDH (Extract&Expand) Serialize&Concat As “info” AuthEncap “shared_secret” Ephemeral PublicKey Receiver PrivateKey KDF for ECDH (Extract&Expand) Serialize&Concat As “info” AuthDecap Receiver PublicKey Derive PublicKey Sender PrivateKey Derive PublicKey ECDH DeriveBits Concat Sender PublicKey Derived Bits Sender PublicKey ECDH DeriveBits Derived Bits ECDH DeriveBits Concat Derived Bits Figure: DHKEM AuthEncap/AuthDecap の構成 Jun Kurihara (Zettant) HPKE October 6, 2021 20 / 40
  • 21. HPKE のセキュリティ HPKE で、ざっと担保されるセキュリティ事項は以下の通り。14 IND-CCA2: AEAD を使うことで選択暗号文攻撃 (Chosen Ciphertext Attack) に対して安全 PSK, Auth, AuthPSK モードによる送信者認証 14Secret export に対する indistinguishability もあるが今回はその解説は省略。 Jun Kurihara (Zettant) HPKE October 6, 2021 21 / 40
  • 22. HPKE は、その構成上、以下の制限事項が存在する。 Receiver Key Pair は Ephemeral ではないため、受信者が Compromise されることについて、Perfect Forward Secrecy を担保しない。 Base/Auth モードでは受信者の秘密鍵が Compromise されてい ないこと、PSK/AuthPSK モードでは受信者の秘密鍵と PSK が Compromise されていないことが必須条件である。 万一の場合に被害を拡大させないためには、受信者が頻繁に鍵 ペアを更新・公開するなどで暫定対処するしかない15 PSK, Auth, AuthPSK における送信者認証は、常に Sender Private Key および PSK が Compromise されていないことが条件。(当然と言え ば当然) 耐量子: 現行の DHKEM では量子コンピュータに対して脆弱なため、 将来的に Context 生成は耐量子公開鍵暗号を規格化する必要性があ る。また、Auth モード等での量子コンピュータに対するセキュリ ティ性能は未証明。 15Cloudflare が寄与した ODoH の実装では 1 日 1 回ローテートさせている。 https://github.com/DNSCrypt/doh-server Jun Kurihara (Zettant) HPKE October 6, 2021 22 / 40
  • 23. Draft 12 で利用可能な KEM, KDF, AEAD のパラメタ一覧 概略解説の最後に、Draft 12 で規定される KEM,KDF,AEAD を一覧する KEM (DHKEM(_curve_, _kdf_)) - DHKEM(X2551916 , HKDF-SHA256) - DHKEM(X44817 , HKDF-SHA512) - DHKEM(P-256, HDKF-SHA256) - DHKEM(P-384, HKDF-SHA384) - DHKEM(P-521, HDKF-SHA512) KDF - HKDF-SHA256 - HKDF-SHA384 - HDKF-SHA512 AEAD - AES-128-GCM - AES-128-GCM - ChaCha20Poly130518 16 RFC7748 17 RFC7748 18 RFC8439 Jun Kurihara (Zettant) HPKE October 6, 2021 23 / 40
  • 24. HPKE応用: TLS Encrypted Client Hello Jun Kurihara (Zettant) HPKE October 6, 2021 24 / 40
  • 25. TLS における Encrypted Client Hello (ECH) HPKE の応用箇所として、IETF TLSWG で検討が進んでい る19Encrypted Client Hello (ECH)20について簡単に紹介する。 Client Hello TLS サーバに繋ぎに行く際、接続したい FQDN や接続可能な L7 プ ロトコル情報 (ALPN21 ) を入れてクライアントが最初に投げるメッ セージ。 19https://datatracker.ietf.org/doc/draft-ietf-tls-esni/ 20ECH は過去には Encrypted Server Name Indication (ESNI) と呼ばれていた。 21 Application Layer Protocol Negotiation Jun Kurihara (Zettant) HPKE October 6, 2021 25 / 40
  • 26. Client Hello の脆弱性 TLS1.3 では、ClientHello より後にやり取りされるメッセージは全 て暗号化されたが、Client Hello 自身は平文のまま。 Client TLS (HTTPS) Server DoH Server HTTPS Secure Channel 1) ClientHello <FQDN: www.zettant.com, ALPN:…> Even if the FQDN is securely hidden in the phase of DNS query… 2) TLS negotiation is all encrypted after ClientHello. The FQDN and other sensitive information are visible in ClientHello!!! 0) Query DNS RR for the target FQDN Figure: ClientHello からアクセス先の情報が漏れる たとえ DNS のやりとりを暗号化しても、ClientHello を盗聴されれ ばアクセス先が漏洩してしまう。 Jun Kurihara (Zettant) HPKE October 6, 2021 26 / 40
  • 27. ECH: TLS ネゴシエーションを全部暗号化 Client Hello から全てネゴシエーションを暗号化してしまおう! ⇒ ECH。そしてその実現のために HPKE を応用。 Client TLS (HTTPS) Server DoH Server HTTPS Secure Channel Encrypted ClientHello by HPKE All messages in TLS negotiation are totally encrypted. Fetch DNS records of - IP Address of the server (A/AAAA record) - “HPKE Public Key” (HTTPS record) Figure: DNS HTTPS レコードを利用した Encrypted Client Hello 概略 HPKE の Receiver (サーバ) Public Key 他を含む Config は、DNS の新設レ コード “HTTPS” (Type65) に記述することが検討されている。22 22Optional であり、事前に端末に埋め込むなど、他の手法で取得しても良い。 Jun Kurihara (Zettant) HPKE October 6, 2021 27 / 40
  • 29. 現行使える HPKE のライブラリ (抜粋) 2021-10-1 時点で、Go/Rust/C (openSSL)/C++ (OpenSSL) ら低級言 語中心で、HPKE のライブラリが実装されている。23 栗原が HPKE の利用シーンでよく見かけるのは以下のあたり: - Cloudflare ODoH 実装で利用: Rust: https://github.com/rozbb/rust-hpke Go: https://github.com/cisco/go-hpke - dnscrypt 実装で利用: Go: https://github.com/jedisct1/go-hpke-compact 今回は、Go のライブラリのテストコードを動作させて暗号化・復 号を追いつつ、Base モードでの動作フローを解説する。 23CFRG のリポジトリを参照: https://github.com/cfrg/draft-irtf-cfrg-hpke Jun Kurihara (Zettant) HPKE October 6, 2021 29 / 40
  • 30. 環境準備: Golang Golang をインストール済みのこと24 栗原の環境 $ go version go version go1.17.1 darwin/arm64 今回は hpke-compact25で動作を追ってみる。学習のためには他の 言語・ライブラリも試すのを推奨する。 ライブラリの準備・依存パッケージのダウンロード 26 $ git clone https://github.com/jedisct1/go-hpke-compact $ cd go-hpke-compact $ go install *.go 24Mac/Linux を想定。Zsh/Bash 等でパスが通っている前提。 25https://github.com/jedisct1/go-hpke-compact 26 test コードの依存パッケージは indirect なので直接 ∗.go ファイルでパッケージダウンロード Jun Kurihara (Zettant) HPKE October 6, 2021 30 / 40
  • 31. Go で HPKE を試す まずはテストコードを動かしてみる $ go test -v === RUN TestExchange --- PASS: TestExchange (0.00s) === RUN TestAuthenticatedExchange --- PASS: TestAuthenticatedExchange (0.00s) === RUN TestVectors --- PASS: TestVectors (0.00s) === RUN TestExportOnly --- PASS: TestExportOnly (0.00s) PASS checks: 0 passed 0 todo 0 failed (total) ok github.com/jedisct1/go-hpke-compact 0.113s - TestExchange: Base モード (PSK モード) での一連の動作テスト - TestAuthenticatedExchange: 同様に Auth モード (AuthdPSK モード) - TestVectors: test vector による出力チェック - TestExportOnly: secret export のテスト Jun Kurihara (Zettant) HPKE October 6, 2021 31 / 40
  • 32. 今回は、基本となる Base モード (引数次第で PSK モードを兼ねる) の動 作テスト (TestExchange) の中身を追って、HPKE のやり取りの理解を深 める。 1. Triplet 指定による HPKE 設定初期化 hpke_test.go: TestExchange suite, err := NewSuite(KemX25519HkdfSha256, KdfHkdfSha256, AeadAes128Gcm) if err != nil { t.Fatal(err) } 前述したように、(KEM, KDF, AEAD) の triplet で HPKE の設定を表す。上 記テストコードでは、triplet の各要素として KEM: DHKEM(X25519 + HKDF-SHA256) KDF: HKDF-SHA256 AEAD: AES128-GCM を利用して HPKE Suite のオブジェクトを生成している。Sender/Receiver の両者で実行。 Jun Kurihara (Zettant) HPKE October 6, 2021 32 / 40
  • 33. 2@Receiver(Server). Receiver Key Pair を生成 hpke_test.go: TestExchange serverKp, err := suite.GenerateKeyPair() if err != nil { t.Fatal(err) } suite オブジェクトを生成する際に X25519 を KEM で利用すると指定して いる。このため、serverKp として、X25519 の鍵ペアを生成。 ここで生成した鍵ペアの公開鍵 serverKp.PublicKey オブジェクトを、 Sender(Client) になんらかの方法で渡しておく。 Jun Kurihara (Zettant) HPKE October 6, 2021 33 / 40
  • 34. 3@Sender(Client). Sender の EncryptionContext と “enc” を生成 hpke_test.go: TestExchange clientCtx, encryptedSharedSecret, err := suite.NewClientContext( serverKp.PublicKey, // 受け取った公開鍵 []byte("test"), // info (App 名など) nil // PSK モードの時は PSK オブジェクトを入れる ) if err != nil { t.Fatal(err) } 生成した Context: clientCtx はクライアントで保持。のちに AEAD 暗号 化で利用。 一方、同時に生成する “enc”: encryptedSharedSecret オブジェクトは、 Receiver(Server) になんらかの方法で渡しておく。AEAD 暗号化データと 一緒に渡しても良い。 Jun Kurihara (Zettant) HPKE October 6, 2021 34 / 40
  • 35. 4@Sender(Client). AEAD 暗号化データの生成 hpke_test.go: TestExchange ciphertext, err := clientCtx.EncryptToServer( []byte("message"), // 暗号化対象データ。string を byte にしている。 nil // aad (optional) ) if err != nil { t.Fatal(err) } ciphertext を Receiver(Server) へ送付。AEAD 暗号化の Nonce は、前述 のように、Context 内部の変数を元に生成されているので意識しなくて 良い。 Jun Kurihara (Zettant) HPKE October 6, 2021 35 / 40
  • 36. 5@Receiver(Server). Receiver の EncryptionContext を生成 hpke_test.go: TestExchange serverCtx, err := suite.NewServerContext( encryptedSharedSecret, // 受け取った ‘‘enc’’、実態は Ephemeral 公開鍵 serverKp, // 1. で生成した Receiver Key Pair []byte("test"), // info (App 名など)、sender 側の記述と一致が必須 nil // PSK モードの時は PSK オブジェクトを入れる ) if err != nil { t.Fatal(err) } Sender(Client) から受け取った “enc” を用いて、Sender と同じ EncryptionContext を生成する。 Jun Kurihara (Zettant) HPKE October 6, 2021 36 / 40
  • 37. 6@Receiver(Server). AEAD 復号 hpke_test.go: TestExchange decrypted, err := serverCtx.DecryptFromClient( ciphertext, // AEAD 暗号化データ nil // aad (Optional)、暗号化時と同じものである必要 ) if err != nil { t.Fatal(err) } Receiver(Server) の context を用いて復号。 Jun Kurihara (Zettant) HPKE October 6, 2021 37 / 40
  • 38. Sender → Receiver への暗号化データ送付について説明したが、共 有した context を使いまわしてその後の「Response」としての Receiver(Server) から Sender(Clident) への暗号化データ送付も可能。 7@Receiver(Server)→Sender(Client). 応答の暗号化・復号 hpke_test.go: TestExchange // サーバでの AEAD 暗号化 ciphertext, err = serverCtx.EncryptToClient([]byte("response"), nil) if err != nil { t.Fatal(err) } // クライアントでの AEAD 復号 decrypted, err = clientCtx.DecryptFromServer(ciphertext, nil) if err != nil { t.Fatal(err) } Jun Kurihara (Zettant) HPKE October 6, 2021 38 / 40
  • 39. まとめ Jun Kurihara (Zettant) HPKE October 6, 2021 39 / 40
  • 40. まとめ HPKE の概略を紹介した HPKE の応用: ECH を紹介した HPKE の実装、テストコードを解説した HPKE という規格は、今後さまざまな箇所の E2E 暗号化に応用が 期待できる。多分押さえておいて損はない。 Jun Kurihara (Zettant) HPKE October 6, 2021 40 / 40