SlideShare a Scribd company logo
JavascriptJavascript で暗号化で暗号化
無料で可能な限りセキュリティを高める。
2013/06/08
自己紹介自己紹介
情強そば屋の中の人こと砂原 昌史
そば屋五兵衛の店主 砂原 謙一(父)
現在⼆級在宅⼠とプログラミングの⽇々
◦ そろそろ本気出したい
◦ 最近は C#(WPF) いじってます
言語
◦ メイン:html, css, javascript, PHP, C#◦ メイン:html, css, javascript, PHP, C#
◦ サブ:perl, powershell
◦ たしなむ程度:ruby, python
◦ 忘れつつある:vbs
◦ ほぼ忘れた:C
松本経済新聞の記事は一部誤りが。
◦ 過去にプログラマーはしたことありません。
Icons by http://dryicons.com
目次目次
五兵衛 web サイトの履歴
通販システムの問題点
暗号技術に触れる
SSL/TLS
呼べば答えるインターネット呼べば答えるインターネット
暗号
暗号鍵作成 – OpenSSL
復号
Pros, Cons
まとめ
Icons by http://dryicons.com
五兵衛五兵衛 webweb サイトの履歴サイトの履歴
www.sobaya-gohei.com
90 年代後半 ホームページ開設。
◦ 当初は父が作成&管理
◦ Web サイトはプロバイダーのホームページスペースに設置
200x プロバイダ乗り換えで CGI (perl) 使用可能に。
◦ 通販ページ作成◦ 通販ページ作成
◦ メール投稿スクリプトを拾ってきてカスタマイズ
2003 クロネコ@ペイメント対応
200x ドメイン取得 (さくらインターネット : ライトプ
ラン[最安])
2010 サイトリニューアル
2013 クロネコ web コレクト対応
通販システムの問題点通販システムの問題点
お客様の情報が平分のままネットワークに流れる
もちろん SSL 使えない。
さくらインターネットの共用 SSL はスタンダードプラ
ン以上 (ドメイン名と違うのでどのみち使えない)
少なくとも通販システムの管理をしているからには情
報漏洩があった場合の責任問題に!報漏洩があった場合の責任問題に!
何か対策をしたい。
高まる暗号化への思い(個人的に)
Icons by http://dryicons.com
暗号技術に触れる暗号技術に触れる
2006 就職。LAN ドライバの評価に携わる。
◦ -無線 LAN との出会い-
評価の仕事だったので詳しいことは知る必要はないが……
◦ やはり技術的なことは気になる
◦ 認証、暗号化、証明書などを調べる
無線 LAN にも SSL/TLS と同じ仕組みが!
これをなんとかして通販システムに組み込む術はないか?とこれをなんとかして通販システムに組み込む術はないか?と
考え始める
でも普通 WEB サイトの暗号化といえば HTTPS, SSL/TLS
だよね!
•ちなみに無線 LAN の認証方式にも TLS が登場します。
•EAP-TLS, PEAP-TLS, PEAP-GTC(内部認証としての TLS)
Icons by http://dryicons.com
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
呼べば答えるインターネット呼べば答えるインターネット
⾞輪の再発明は避ける
世界には同じようなことを考えた人がいるはず!
いろいろ検索していて、AES として sjcl に、公開鍵暗
号(RSA) として Tom Wu 氏のライブラリにたどり着
く。
SJCL : Stanford Javascript Crypto LibrarySJCL : Stanford Javascript Crypto Library
公開鍵暗号の js 実装は他にもいろいろあるみたいです。
javascript での AES は sjcl がスタンダードっぽい。
Icons by http://dryicons.com
暗号暗号暗号暗号暗号暗号暗号暗号
暗号について暗号について
共通鍵暗号
◦ 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
なぜ2種類使うのか?なぜ2種類使うのか?
共通鍵暗号 (AES)
◦ 暗号化は簡単だ。だがパスフレーズをどうやって受け取る?
公開鍵暗号 (RSA)
◦ 暗号化できるデータの⻑さが鍵⻑によって決まってしまう!
どうするか?
両方使え!
データは AES で暗号化
パスフレーズは短いので RSA で暗号化 これを両方送る。
Icons by http://dryicons.com
暗号鍵作成暗号鍵作成 -- 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
暗号化手順暗号化手順
1. パスフレーズ作成 (for AES)
2. データの暗号化 - AES
3. パスフレーズの暗号化 - RSA
お客様端末での処理
Icons by http://dryicons.com
パスフレーズ作成パスフレーズ作成
自動⽣成。
英数字といくつかの記号から導出。
◦ 通販ページではお客様のメールアドレスも利用
乱数
◦ 古いブラウザでは Math.random()
◦ 新しいブラウザでは
window.crypto.getRandomValues()
新しいブラウザでは
window.crypto.getRandomValues()
◦ Firefox21 で対応になったので取り入れてみました。
Chrome, Safari では結構前から対応していたようです。
このパスフレーズは実際の暗号に使う鍵の元になる。
Icons by http://dryicons.com
データの暗号データの暗号 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
データの暗号データの暗号 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
復号復号
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
PROS, CONSPROS, CONS
メリット、デメリットを SSL/TLS, js 暗号, 無対策で
比較
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
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
まとめまとめ
SSL/TLS の方がセキュリティは高いですが、脆弱性も⾒つ
かっているので注意。
◦ パッチやアップデートの適用を。
Js 暗号化に穴がいくつかありますが、やらないよりはまし
◦ ぬののふく <<< くさりかたびら
ライブラリの中身を確認した上で通常の SSL/TLS と組み合
わせてさらに上のセキュリティを目指すのもありかと。わせてさらに上のセキュリティを目指すのもありかと。
◦ Web Cryptography API にも期待
!注意点!
両ライブラリとも BSD ライセンスであり、「無保証」です。
テストは重要。
◦ 五兵衛では少なくとも 50 件 (通販) 以上の復号で失敗は無し。
2013/05
Icons by http://dryicons.com
ありがとうございました。
砂原 昌史

More Related Content

What's hot

[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
ChangKyu Song
 
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
abend_cve_9999_0001
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
 

What's hot (20)

[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
 
SANS Holiday Hack 2017 (非公式ガイド)
SANS Holiday Hack 2017 (非公式ガイド)SANS Holiday Hack 2017 (非公式ガイド)
SANS Holiday Hack 2017 (非公式ガイド)
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
【CEDEC2017】Unityを使ったNintendo Switch™向けのタイトル開発・移植テクニック!!
 
Unityアセット販売の真実
Unityアセット販売の真実Unityアセット販売の真実
Unityアセット販売の真実
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
 
UnityでUI開発を高速化した件
UnityでUI開発を高速化した件UnityでUI開発を高速化した件
UnityでUI開発を高速化した件
 
OWASP TOP10 A01:2021 – アクセス制御の不備
OWASP TOP10 A01:2021 – アクセス制御の不備OWASP TOP10 A01:2021 – アクセス制御の不備
OWASP TOP10 A01:2021 – アクセス制御の不備
 
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
ウェブ・セキュリティ基礎試験(徳丸基礎試験)の模擬試験問題
 
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
[2B7]시즌2 멀티쓰레드프로그래밍이 왜 이리 힘드나요
 
SecurityCamp2015「バグハンティング入門」
SecurityCamp2015「バグハンティング入門」SecurityCamp2015「バグハンティング入門」
SecurityCamp2015「バグハンティング入門」
 
Arxan導入前後で変わったこと
Arxan導入前後で変わったことArxan導入前後で変わったこと
Arxan導入前後で変わったこと
 
ららマジでしかできない!?キャラクターアセット最適化事例
ららマジでしかできない!?キャラクターアセット最適化事例ららマジでしかできない!?キャラクターアセット最適化事例
ららマジでしかできない!?キャラクターアセット最適化事例
 
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
 
フィッシングとドメイン名・DNS
フィッシングとドメイン名・DNSフィッシングとドメイン名・DNS
フィッシングとドメイン名・DNS
 
.NET 6 と Blazor で作るクロスプラットフォームアプリ概要
.NET 6 と Blazor で作るクロスプラットフォームアプリ概要.NET 6 と Blazor で作るクロスプラットフォームアプリ概要
.NET 6 と Blazor で作るクロスプラットフォームアプリ概要
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
フリーでできるセキュリティWeb編(SQLMあpを楽しもう)
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
 
SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向SSL/TLSの基礎と最新動向
SSL/TLSの基礎と最新動向
 

Similar to Javascript で暗号化

人生を豊かにするための暗号技術の話 - ネクストスケープ 2014/04/24 パワーランチ資料
人生を豊かにするための暗号技術の話 - ネクストスケープ 2014/04/24 パワーランチ資料人生を豊かにするための暗号技術の話 - ネクストスケープ 2014/04/24 パワーランチ資料
人生を豊かにするための暗号技術の話 - ネクストスケープ 2014/04/24 パワーランチ資料
matns
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと
MITSUNARI Shigeo
 
平成21年度 秋期 cs 午前ⅱ
平成21年度 秋期 cs 午前ⅱ平成21年度 秋期 cs 午前ⅱ
平成21年度 秋期 cs 午前ⅱ
Yuki Hirano
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
Akira Inoue
 
あんしんなWebサーバーのためのSSL設定
あんしんなWebサーバーのためのSSL設定あんしんなWebサーバーのためのSSL設定
あんしんなWebサーバーのためのSSL設定
Takayuki Ino
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
Naoya Ito
 

Similar to Javascript で暗号化 (20)

Sagittariusの紹介
Sagittariusの紹介Sagittariusの紹介
Sagittariusの紹介
 
バックドア耐性のあるパスワード暗号化の提案
バックドア耐性のあるパスワード暗号化の提案バックドア耐性のあるパスワード暗号化の提案
バックドア耐性のあるパスワード暗号化の提案
 
人生を豊かにするための暗号技術の話 - ネクストスケープ 2014/04/24 パワーランチ資料
人生を豊かにするための暗号技術の話 - ネクストスケープ 2014/04/24 パワーランチ資料人生を豊かにするための暗号技術の話 - ネクストスケープ 2014/04/24 パワーランチ資料
人生を豊かにするための暗号技術の話 - ネクストスケープ 2014/04/24 パワーランチ資料
 
高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと高速な暗号実装のためにしてきたこと
高速な暗号実装のためにしてきたこと
 
図解で理解するvetKD
図解で理解するvetKD図解で理解するvetKD
図解で理解するvetKD
 
Xbyakの紹介とその周辺
Xbyakの紹介とその周辺Xbyakの紹介とその周辺
Xbyakの紹介とその周辺
 
SparkやBigQueryなどを用いた モバイルゲーム分析環境
SparkやBigQueryなどを用いたモバイルゲーム分析環境SparkやBigQueryなどを用いたモバイルゲーム分析環境
SparkやBigQueryなどを用いた モバイルゲーム分析環境
 
平成21年度 秋期 cs 午前ⅱ
平成21年度 秋期 cs 午前ⅱ平成21年度 秋期 cs 午前ⅱ
平成21年度 秋期 cs 午前ⅱ
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテムSmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
 
JNSA電子署名WG勉強会 2013.09.30 jsrsasignとjsjwsについて
JNSA電子署名WG勉強会 2013.09.30 jsrsasignとjsjwsについてJNSA電子署名WG勉強会 2013.09.30 jsrsasignとjsjwsについて
JNSA電子署名WG勉強会 2013.09.30 jsrsasignとjsjwsについて
 
CRYPT+YOU, UNDERSTAND TODAY!
CRYPT+YOU, UNDERSTAND TODAY!CRYPT+YOU, UNDERSTAND TODAY!
CRYPT+YOU, UNDERSTAND TODAY!
 
MSOfficeファイル暗号化のマスター鍵を利用したバックドアとその対策 by 光成滋生&竹迫良範
MSOfficeファイル暗号化のマスター鍵を利用したバックドアとその対策 by 光成滋生&竹迫良範MSOfficeファイル暗号化のマスター鍵を利用したバックドアとその対策 by 光成滋生&竹迫良範
MSOfficeファイル暗号化のマスター鍵を利用したバックドアとその対策 by 光成滋生&竹迫良範
 
公開鍵、秘密鍵ってなに?
公開鍵、秘密鍵ってなに?公開鍵、秘密鍵ってなに?
公開鍵、秘密鍵ってなに?
 
あんしんなWebサーバーのためのSSL設定
あんしんなWebサーバーのためのSSL設定あんしんなWebサーバーのためのSSL設定
あんしんなWebサーバーのためのSSL設定
 
(A7)cross site scripting
(A7)cross site scripting(A7)cross site scripting
(A7)cross site scripting
 
TDEで透過的暗号化
TDEで透過的暗号化TDEで透過的暗号化
TDEで透過的暗号化
 
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
 

More from suno88

8bit 時代のプログラミング事情を訪ねて
8bit 時代のプログラミング事情を訪ねて8bit 時代のプログラミング事情を訪ねて
8bit 時代のプログラミング事情を訪ねて
suno88
 
ITでみんなを幸せに、ITで自分も幸せに
ITでみんなを幸せに、ITで自分も幸せにITでみんなを幸せに、ITで自分も幸せに
ITでみんなを幸せに、ITで自分も幸せに
suno88
 

More from suno88 (16)

もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったかもうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
もうひとつのアンチパターン OTLT、あるいは如何にして私はオレオレフレームワークを忌み嫌うようになったか
 
NSEG のこれまでとこれから
NSEG のこれまでとこれからNSEG のこれまでとこれから
NSEG のこれまでとこれから
 
AWS で社内オンライン勉強会
AWS で社内オンライン勉強会AWS で社内オンライン勉強会
AWS で社内オンライン勉強会
 
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
NetBeans、FuelPHP と過ごしたこの 2 ヶ月NetBeans、FuelPHP と過ごしたこの 2 ヶ月
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
 
HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話HTML と CSS の社内勉強会を主催した話
HTML と CSS の社内勉強会を主催した話
 
初心者向け SQLite の始め方
初心者向け SQLite の始め方初心者向け SQLite の始め方
初心者向け SQLite の始め方
 
NSEG 勉強会 二周年に寄せて
NSEG 勉強会 二周年に寄せてNSEG 勉強会 二周年に寄せて
NSEG 勉強会 二周年に寄せて
 
続・ねえ、お父さんのお仕事ってなぁに?
続・ねえ、お父さんのお仕事ってなぁに?続・ねえ、お父さんのお仕事ってなぁに?
続・ねえ、お父さんのお仕事ってなぁに?
 
ねえ、お父さんのお仕事ってなぁに?
ねえ、お父さんのお仕事ってなぁに?ねえ、お父さんのお仕事ってなぁに?
ねえ、お父さんのお仕事ってなぁに?
 
Windows azure
Windows azureWindows azure
Windows azure
 
Cloud
CloudCloud
Cloud
 
「交通勉強会 ~Trafficonf ~」発足に寄せて
「交通勉強会 ~Trafficonf ~」発足に寄せて「交通勉強会 ~Trafficonf ~」発足に寄せて
「交通勉強会 ~Trafficonf ~」発足に寄せて
 
ソフトウェアエンジニアに必要な法律・契約のお話
ソフトウェアエンジニアに必要な法律・契約のお話ソフトウェアエンジニアに必要な法律・契約のお話
ソフトウェアエンジニアに必要な法律・契約のお話
 
8bit 時代のプログラミング事情を訪ねて
8bit 時代のプログラミング事情を訪ねて8bit 時代のプログラミング事情を訪ねて
8bit 時代のプログラミング事情を訪ねて
 
山椒は小粒でぴりりと辛い
山椒は小粒でぴりりと辛い山椒は小粒でぴりりと辛い
山椒は小粒でぴりりと辛い
 
ITでみんなを幸せに、ITで自分も幸せに
ITでみんなを幸せに、ITで自分も幸せにITでみんなを幸せに、ITで自分も幸せに
ITでみんなを幸せに、ITで自分も幸せに
 

Recently uploaded

2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
ssuserbefd24
 

Recently uploaded (10)

論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 

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 コレクト対応
  • 5. 通販システムの問題点通販システムの問題点 お客様の情報が平分のままネットワークに流れる もちろん SSL 使えない。 さくらインターネットの共用 SSL はスタンダードプラ ン以上 (ドメイン名と違うのでどのみち使えない) 少なくとも通販システムの管理をしているからには情 報漏洩があった場合の責任問題に!報漏洩があった場合の責任問題に! 何か対策をしたい。 高まる暗号化への思い(個人的に) Icons by http://dryicons.com
  • 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
  • 8. 呼べば答えるインターネット呼べば答えるインターネット ⾞輪の再発明は避ける 世界には同じようなことを考えた人がいるはず! いろいろ検索していて、AES として sjcl に、公開鍵暗 号(RSA) として Tom Wu 氏のライブラリにたどり着 く。 SJCL : Stanford Javascript Crypto LibrarySJCL : Stanford Javascript Crypto Library 公開鍵暗号の js 実装は他にもいろいろあるみたいです。 javascript での AES は sjcl がスタンダードっぽい。 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
  • 11. なぜ2種類使うのか?なぜ2種類使うのか? 共通鍵暗号 (AES) ◦ 暗号化は簡単だ。だがパスフレーズをどうやって受け取る? 公開鍵暗号 (RSA) ◦ 暗号化できるデータの⻑さが鍵⻑によって決まってしまう! どうするか? 両方使え! データは AES で暗号化 パスフレーズは短いので 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
  • 13. 暗号化手順暗号化手順 1. パスフレーズ作成 (for AES) 2. データの暗号化 - AES 3. パスフレーズの暗号化 - RSA お客様端末での処理 Icons by http://dryicons.com
  • 14. パスフレーズ作成パスフレーズ作成 自動⽣成。 英数字といくつかの記号から導出。 ◦ 通販ページではお客様のメールアドレスも利用 乱数 ◦ 古いブラウザでは Math.random() ◦ 新しいブラウザでは window.crypto.getRandomValues() 新しいブラウザでは window.crypto.getRandomValues() ◦ Firefox21 で対応になったので取り入れてみました。 Chrome, Safari では結構前から対応していたようです。 このパスフレーズは実際の暗号に使う鍵の元になる。 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
  • 18. PROS, CONSPROS, CONS メリット、デメリットを SSL/TLS, js 暗号, 無対策で 比較
  • 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