Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
IPsecを用いた鍵管理プロトコルと VPNルータの開発
Search
Ren Kimura
July 29, 2016
Programming
1
3.8k
IPsecを用いた鍵管理プロトコルと VPNルータの開発
OSC/Kyoto 2016
Ren Kimura
July 29, 2016
Tweet
Share
More Decks by Ren Kimura
See All by Ren Kimura
Ideas for defeating Anti-Deep-Fakes
rkx1209
0
45
セキュリティベンチャーのリスク管理
rkx1209
0
88
ファジング+トリアージ技術を用いた脆弱性解析自動化
rkx1209
0
74
Introduction to Fuzzing
rkx1209
6
4.2k
ARM TrustZone エクスプロイト入門
rkx1209
7
8.1k
The Game is Over. Nintendo switch has been totally compromised
rkx1209
9
5.1k
インサイドNintendo Switch
rkx1209
18
13k
More efficient remote debugging with Thin Hypervisor
rkx1209
3
2.5k
Reverse Debugging with radare2
rkx1209
6
1.9k
Other Decks in Programming
See All in Programming
マイコンでもRustのtestがしたい/KernelVM Kansai 11
tnishinaga
1
910
ビカム・ア・コパイロット
ymd65536
1
150
私のRubyKaigi 2025 Kaigi Effect / My RubyKaigi 2025 Kaigi Effect
chobishiba
1
140
VitestのIn-Source Testingが便利
taro28
9
2.5k
Road to Ruby for A Linguistics Nerd
hayat01sh1da
PRO
0
340
実践Webフロントパフォーマンスチューニング
cp20
45
10k
20250429 - CNTUG Meetup #67 / DevOps Taiwan Meetup #69 - Deep Dive into Tetragon: Building Runtime Security and Observability with eBPF
tico88612
0
190
ぽちぽち選択するだけでOSSを読めるVSCode拡張機能
ymbigo
14
6.5k
クラス設計の手順
akikogoto
0
110
Browser and UI #2 HTML/ARIA
ken7253
2
180
AWS Summit Hong Kong 2025: Reinventing Programming - How AI Transforms Our Enterprise Coding Approach
dwchiang
0
150
2025年のz-index設計を考える
tak_dcxi
12
4.8k
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
A better future with KSS
kneath
239
17k
The Language of Interfaces
destraynor
158
25k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
710
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Navigating Team Friction
lara
185
15k
Gamification - CAS2011
davidbonilla
81
5.3k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.3k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.7k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
Transcript
IPsecを用いた鍵管理プロトコルと VPNルータの開発 @RKX1209 OSC Kyoto 2016
自己紹介 @RKX1209 神戸大学 工学部 B4 - 型システム, セキュリティ(アクセス制御とか)の研究 OS,VMM,コンパイラ,サーバーなど、基盤技術をさわってる #QEMU
contributor #seccamp14,15,16 #未踏16
話すこと • IPsec-VPNルーターの自作 • ルーターの開発(ARPの実装) • IPsecデーモンの開発 - IKEv2 [RFC5996],
- PFKeyv2 [RFC2376], - ESP [RFC4303] の実装 RKX1209/OpenVpnRouter https://github.com/RKX1209/OpenVpnRouter
IPsec-VPN SA(Security Association)による論理的なコネクションを使用 Configuring Cisco IOS Easy VPN Remote with
802.1x Authentication
IPsec AH, ESP AH,ESPいずれかの方式を選択。後者が比較的よく使われる Crypto map based IPsec VPN fundamentals
- negotiation and configuration
ESP(Encapsulating Security Payload) • データの機密性確保 - トンネルモードの場合はIPパケット全体を、トランスポートモードの場合 はIPペイロード部を暗号化 (3DES, RC5,
IDEA, CAST-128, Blowfish-CBC….) • データ送信元の認証 - 共有秘密鍵を用いた送信相手の認証 (HMAC-SHA-1-96) • 送信データの完全性の確保 - 初期ベクトルIVを用いた認証付き暗号が利用できる (AES-GCM, AES-CCM) どのアルゴリズムを使用するのか選択する必要がある
SA(Security Association) IPsecで使用される単方向コネクション。SPIで判別 • SPD (Security Policy Database) - IPパケットを受信した際、まず最初に参照されるポリシーデー
タベース。 該当パケットにIPsecを適用するか否かを決定する • SAD (Security Association Database) - 次にSPIなどをキーとして該当するコネクションSAを検索。SA が存在しない場合はIKEv2などの鍵管理プロトコルによって SAが生成される。
SA(Security Association) SAは単方向でかつプロトコルごとに1つ。 例えばESP,AH両方使用する場合4コネクション必要 CISCO: IPSec Overview Part Five: Security
Associations
IKEv2(Internet Key Exchange version2) • SAの管理と選択 - 提案されたSAパラメータを元にIKE_SA, CHILD_SAを作 成。CHILD_SAがIPsecのSA。IKE_SAは2本のCHILD_SAから
なる。 • 共有秘密鍵の管理 - 定期的な二者間での鍵の共有,変更を行う。鍵の変更はDiffie- Hellman鍵共有アルゴリズムを用いる。 • 相手の認証 - 事前共有方式かデジタル署名により相手を認証 SAの作成や暗号化,認証アルゴリズムの決定,通知を二者間で行うプロトコル
IKEv2(Internet Key Exchange version2) IKEv2(ISAKMP)はUDPの500番ポートを使用
IKEv2(Internet Key Exchange version2) IKEv2 header Initiator cookie: 送信者のIKE_SA SPI
Responder cookie: 応答者のIKE_SA SPI Next Payload: 次ペイロード番号(種類) ヘッダの後に数種類のペイロードが次々とつながっている。 ペイロードにはSA作成や鍵交換用途など様々な種類があり、 必要になったペイロードをヘッダの後につなげて送信する。
IKEv2(Internet Key Exchange version2) ペイロードの種類。これらを適時組み合わせて通信する
IKEv2(Internet Key Exchange version2) 両者間にSAが作成されるまでのやり取り IKE_SA_INIT: IKE_SAの選択,共有秘密鍵の生成 IKE_AUTH: 相手の認証, CHILD_SAの選択と共有秘密鍵の作成
VPNs mit Strongswan-IKEv2 Linux-Magazine
PFKeyv2 IKE鍵交換デーモンがSADBにSAを登録,選択,削除などを行う際に使用する、 鍵管理プロトコル Kazunori Miyazawa: Linux Conference 2001 - SADBとPFKEYv2
PFKeyv2 RFC2367: PF_KEY Key Management API, Version 2
OpenSwan • KLIPS - カーネルにIPsec機能を実装するための パッチ郡(メインラインマージ済み) • PLUTO - IKE鍵交換,
PFKey鍵管理をつかさどるデーモン • 管理用コマンド/スクリプト - KLIPSとPLUTOのための管理用スクリプト VPNルータの実装はOpenSwanのコードを参考にした
OpenSwan IKE_SA_INIT,AUTHなどのやり取りをオートマトンとして表現。 正しい通信の順番を保証するような実装が取られている。 state: 以前の状態 next_state: 次の状態 recv_type: 通信の種類(IKE_SA_INIT or
IKE_SA_AUTO or…) processor: 次の状態に移る際に実行するルーチン (programs/pluto/ikev2.c)
OpenSwan
OpenSwan PFKeyはLinuxのXFRMインターフェース/proc/net/pfkeyと netlinkを利用してカーネルと通信するような実装 (programs/pluto/kernel_netlink.c) add_sa: SAをSADBに追加 del_sa: SAをSADBから削除 get_sa: SAをSADBから取得
get_spi: SPIを取得
自作VPNルータ ルーティングは同セグメントならARP、 別セグメントなら上位ルータに委譲 ルーターにVPNサーバーを実装。 OpenSwanを参考に開発したため、 似たような動作をする。 (動作がまだ不安定, 未完成です) https://github.com/RKX1209/OpenVpnRouter
自作VPNルータ • IPsec-AHの実装 • IPsecポリシーの実装 • NAT Traversal • チェックサム計算,暗号化などのオフローディング
- FPGAで回路実装 TODO
Reference • 馬場達也 “マスタリング IPsec” O'REILLY ジャパン2006 • RFC 5996:
Internet Key Exchange Protocol Version 2 (IKEv2) • RFC2367: PF_KEY Key Management API, Version 2 • RFC 4303: IP Encapsulating Security Payload (ESP) • WIDE Project “第XIV部 IPパケットの暗号化と認証” 2004