Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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.9k
IPsecを用いた鍵管理プロトコルと VPNルータの開発
OSC/Kyoto 2016
Ren Kimura
July 29, 2016
Tweet
Share
More Decks by Ren Kimura
See All by Ren Kimura
脅威解析概論
rkx1209
0
79
Ideas for defeating Anti-Deep-Fakes
rkx1209
0
84
セキュリティベンチャーのリスク管理
rkx1209
0
140
ファジング+トリアージ技術を用いた脆弱性解析自動化
rkx1209
0
120
Introduction to Fuzzing
rkx1209
6
4.3k
ARM TrustZone エクスプロイト入門
rkx1209
7
8.4k
The Game is Over. Nintendo switch has been totally compromised
rkx1209
9
5.2k
インサイドNintendo Switch
rkx1209
18
13k
More efficient remote debugging with Thin Hypervisor
rkx1209
3
2.6k
Other Decks in Programming
See All in Programming
LLMで複雑な検索条件アセットから脱却する!! 生成的検索インタフェースの設計論
po3rin
4
960
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
260
Rubyで鍛える仕組み化プロヂュース力
muryoimpl
0
160
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
39
26k
Cell-Based Architecture
larchanjo
0
140
まだ間に合う!Claude Code元年をふりかえる
nogu66
5
890
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
170
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
170
안드로이드 9년차 개발자, 프론트엔드 주니어로 커리어 리셋하기
maryang
1
130
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
140
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
3.9k
Graviton と Nitro と私
maroon1st
0
130
Featured
See All Featured
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
280
A designer walks into a library…
pauljervisheath
210
24k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
2
260
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
400
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
0
950
YesSQL, Process and Tooling at Scale
rocio
174
15k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
73
Designing for Performance
lara
610
69k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Building an army of robots
kneath
306
46k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
120
The Spectacular Lies of Maps
axbom
PRO
1
400
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