Weitere ähnliche Inhalte
Ähnlich wie Javascript で暗号化 (20)
Kürzlich hochgeladen (10)
Javascript で暗号化
- 2. 自己紹介自己紹介
情強そば屋の中の人こと砂原 昌史
そば屋五兵衛の店主 砂原 謙一(父)
現在⼆級在宅⼠とプログラミングの⽇々
◦ そろそろ本気出したい
◦ 最近は C#(WPF) いじってます
言語
◦ メイン:html, css, javascript, PHP, C#◦ メイン:html, css, javascript, PHP, C#
◦ サブ:perl, powershell
◦ たしなむ程度:ruby, python
◦ 忘れつつある:vbs
◦ ほぼ忘れた:C
松本経済新聞の記事は一部誤りが。
◦ 過去にプログラマーはしたことありません。
Icons by http://dryicons.com
- 4. 五兵衛五兵衛 webweb サイトの履歴サイトの履歴
www.sobaya-gohei.com
90 年代後半 ホームページ開設。
◦ 当初は父が作成&管理
◦ Web サイトはプロバイダーのホームページスペースに設置
200x プロバイダ乗り換えで CGI (perl) 使用可能に。
◦ 通販ページ作成◦ 通販ページ作成
◦ メール投稿スクリプトを拾ってきてカスタマイズ
2003 クロネコ@ペイメント対応
200x ドメイン取得 (さくらインターネット : ライトプ
ラン[最安])
2010 サイトリニューアル
2013 クロネコ web コレクト対応
- 6. 暗号技術に触れる暗号技術に触れる
2006 就職。LAN ドライバの評価に携わる。
◦ -無線 LAN との出会い-
評価の仕事だったので詳しいことは知る必要はないが……
◦ やはり技術的なことは気になる
◦ 認証、暗号化、証明書などを調べる
無線 LAN にも SSL/TLS と同じ仕組みが!
これをなんとかして通販システムに組み込む術はないか?とこれをなんとかして通販システムに組み込む術はないか?と
考え始める
でも普通 WEB サイトの暗号化といえば HTTPS, SSL/TLS
だよね!
•ちなみに無線 LAN の認証方式にも TLS が登場します。
•EAP-TLS, PEAP-TLS, PEAP-GTC(内部認証としての TLS)
Icons by http://dryicons.com
- 7. SSL/TLSSSL/TLS
+ VPS とか……
サービスサービスサービスサービス会社会社会社会社 商品名商品名商品名商品名 価格価格価格価格
VeriSign セキュアサーバーID 85050 円/Year
GlobalSign クイック認証 SSL 36540 円/Year
GeoTrust クイック SSL プレミアム 36540 円/Year
+ VPS とか……
◦ さくらのVPS 1G 980/Month, 10780/Year
格安証明書もありますが……
地方の零細企業にとってはちょいと敷居が高い。
•貧乏人は頭を使え! javascript で暗号化すればよくね?
•CGI で疑似 SSL/TLS という手もあるが、オレオレ証明書に代わりは
ないので javascript で出来るならそれだけで済ませたい。
Icons by http://dryicons.com
- 10. 暗号について暗号について
共通鍵暗号
◦ 2000年以上の歴史を持つ基本的な暗号化方式。
◦ データを鍵で暗号化。復号化するときも同じ鍵を使う。
◦ DES, AES, RC4 など
◦ 現在 AES が一般的
◦ Camellia なんてのもある (OpenSSL.org とか)
公開鍵暗号公開鍵暗号
◦ 公開鍵で暗号化したものは秘密鍵でのみ復号でき、秘密鍵で暗号化
したものは公開鍵でのみ復号できる。
◦ わりと最近発⾒された新たな暗号化方式。RSA など
◦ 素因数分解の難解さと関連する暗号化方式。
◦ 公開鍵 n = p*q (p, q は素数)
◦ p, q は秘密鍵⽣成にも利用されるが、巨⼤な n からは p と q を
導きだすのは困難。(参考:wikipedia RSA暗号)
これを両方使います。
Icons by http://dryicons.com
- 12. 暗号鍵作成暗号鍵作成 -- OpenSSLOpenSSL
Tom Wu 氏のライブラリで使う RSA のキーペアは事
前に OpenSSL にて作成します。
鍵作成コマンド : test.key という名前で鍵⻑が
2048bit の場合
◦ openssl genrsa -out test.key 2048
鍵情報表示 (公開鍵、秘密鍵含めてすべて)
◦ openssl rsa -in test.key –text◦ openssl rsa -in test.key –text
◦ 実際に使用する際は : とかスペースなどを取って使います。
Modulus (公開鍵) 表示
◦ openssl rsa -in test.key -noout –modulus
◦ これで出⼒される 16 進数⽂字列をそのまま使います。
Icons by http://dryicons.com
- 15. データの暗号データの暗号 AESAES
var encData = sjcl.encrypt(passWord, rawData, PARAM);
◦ passWord, rawData : ⽂字列
◦ PARAM : オブジェクト。オプションです。
◦ 例) {adata:"", iter:1000, mode:"ccm", ts:128, ks:256};
◦ Adata : データ確認用の⽂字列。ccm モードの機能。空⽂字でも OK
◦ Iter : PBKDF2 で使用。通常は 1000 で十分な模様
◦ mode AES にはいろんな暗号モードがありますが、sjcl がサポートするのは
ccm と ocb2
CCM : [CounterMode with CBC-MAC] RFC3610
ccm と ocb2
CCM : [CounterMode with CBC-MAC] RFC3610
MAC : Message Authentication Code
カウンターモードと CBC-MAC を組み合わせた方式
メッセージを分割し、CBC-MAC で MAC 作成。MAC 処理で⽣成されたタグ+メッ
セージをカウンターモードで暗号化。
http://www.cryptrec.go.jp/estimation/rep_ID0205.pdf 35Pより
OCB2 : ccm より高速だが特許絡みで避けられることが多いようだ。
◦ Ts : (authentication) tag size 64(bit) で十分らしいが、128(bit) にしてい
ます。MAC のサイズ。
◦ Ks : Kye Size AES キーのサイズ。
Icons by http://dryicons.com
- 16. データの暗号データの暗号 RSARSA
var rsa = new RSAKey();//1
rsa.setPublic(PUB_KEY, EXP);//2
var encPW = rsa.encrypt(passWord);//3
◦ 1.RSAKey のインスタンス作成。
◦ 2.公開鍵とエクスポーネントの設定。両方⽂字列
exponent 暗号指数 "10001" が一般的。0x010001。
◦ 3.encrypt メソッドに暗号化したい⽂字列を入れると 16◦ 3.encrypt メソッドに暗号化したい⽂字列を入れると 16
進数形式の⽂字列が出てきます。
Icons by http://dryicons.com
- 17. 復号復号
RSA 鍵情報のすべてを使います。
var rsa = new RSAKey();
rsa.setPrivateEx(n,e,d,p,q,dmp1,dmq1,coeff);
var result = rsa.decrypt(encData);
◦ n:pubKey(modulus)
◦ e:exponent(publicExponent)
◦ d:privateKey(privateExponent)
e:exponent(publicExponent)
◦ d:privateKey(privateExponent)
◦ p, q:prime1, 2
◦ dmp1, dmp2:exponent1, 2
◦ coeff:coefficient
var original = sjcl.decrypt(result, encData);
Icons by http://dryicons.com
- 19. SSL/TLS Js 暗号化
1. 有料
2. 証明書の偽造、詐称などを検出するための
認証機能を持つ。(プロトコルの脆弱性に注
意)
3. 暗号化の保証は web サーバーまで。その後
は……
4. ブラウザの javascript 設定に無関係。ただ
しプロトコルはブラウザや OS の設定など
に強く影響を受ける。
◦ Firefox TLS 1.0
◦ Chrome TLS 1.1
◦ Opera TLS 1.2
1. 無料
2. MITM 攻撃の可能性
◦ 店頭でオレオレ証明書を配布する方法もあるが、
非現実的すぎる。
3. メールでデータを受け取るまで暗号化。
4. javascript が有効になっていないと使えな
いが、ブラウザに関係なく AES とか使える。
5. js ライブラリの検証等がなされていない。
たとえ検証されていても、スクリプトダウ
ンロード中での MITM 攻撃やサーバーク
ラックに弱い
◦ 復号失敗が発⽣した場合、原因が不明瞭
SSL/TLSSSL/TLS とととととととと jsjs 暗号化暗号化暗号化暗号化のののの比較比較比較比較暗号化暗号化暗号化暗号化のののの比較比較比較比較
◦ Opera TLS 1.2
◦ IE は OS に依存。Windows7 以降なら TLS
1.2 使用可能。※
◦ iOS 5 TLS 1.2
◦ android TLS 1.0?
5. 信頼性 : OpenSSL, NSS など FIPS 140
validated
◦ 復号失敗が発⽣した場合、原因が不明瞭
スクリプトのバグ?
MITM 攻撃された?
サーバーがクラックされた?
どこかでデータの改ざんがあった?
◦ W3C で Web Cryptography API が策定中なの
で、これが勧告されて実装されれば改善される
※ mmc のグループポリシーオブジェクトエディタにて[コンピュータの構成¥Windows の設定¥セキュリティの設定¥ローカルポリシー¥セ
キュリティオプション]にある[システム暗号化: 暗号化、ハッシュ、署名のための FIPS 140 準拠暗号化アルゴリズムを使う] を有効にする必
要がある。ただしこれを⾏うと RC4 が使用不可になる模様
Icons by http://dryicons.com
- 20. Js 暗号化 無対策
1. 無料
2. MITM 攻撃の可能性
◦ 店頭でオレオレ証明書を配布する方法もあるが、
非現実的すぎる。
3. メールでデータを受け取るまで暗号化。
4. javascript が有効になっていないと使えな
いが、ブラウザに関係なく AES とか使える。
5. js ライブラリの検証等がなされていない。
たとえ検証されていても、スクリプトダウ
ンロード中での MITM 攻撃やサーバーク
ラックに弱い
◦ 復号失敗が発⽣した場合、原因が不明瞭
1. 無料
2. MITM ほかあらゆる攻撃に無防備
3. 暗号化無し。サーバー、ネットワーク
経路双方に死角あり。
4. どの端末でもフォームは送信可能。
5. --
JsJs 暗号化暗号化暗号化暗号化とととと無対策無対策無対策無対策のののの比較比較比較比較暗号化暗号化暗号化暗号化とととと無対策無対策無対策無対策のののの比較比較比較比較
◦ 復号失敗が発⽣した場合、原因が不明瞭
スクリプトのバグ?
MITM 攻撃された?
サーバーがクラックされた?
どこかでデータの改ざんがあった?
◦ W3C で Web Cryptography API が策定中なの
で、これが勧告されて実装されれば改善される
Icons by http://dryicons.com
- 21. まとめまとめ
SSL/TLS の方がセキュリティは高いですが、脆弱性も⾒つ
かっているので注意。
◦ パッチやアップデートの適用を。
Js 暗号化に穴がいくつかありますが、やらないよりはまし
◦ ぬののふく <<< くさりかたびら
ライブラリの中身を確認した上で通常の SSL/TLS と組み合
わせてさらに上のセキュリティを目指すのもありかと。わせてさらに上のセキュリティを目指すのもありかと。
◦ Web Cryptography API にも期待
!注意点!
両ライブラリとも BSD ライセンスであり、「無保証」です。
テストは重要。
◦ 五兵衛では少なくとも 50 件 (通販) 以上の復号で失敗は無し。
2013/05
Icons by http://dryicons.com