Submit Search
Upload
きっと今すぐ使えるハッシュの基礎知識
•
1 like
•
971 views
Ryo Sasaki
Follow
非常に身近だけれども、詳しく知る機会のないハッシュ技術について簡単に紹介。 前半はハッシュ技術について。 後半よくありがちな認証まわりの問題について。
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 36
Download now
Download to read offline
Recommended
インメモリーデータグリッドの選択肢
インメモリーデータグリッドの選択肢
Masaki Yamakawa
フロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkan
Itsuki Kuroda
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~
Masahito Zembutsu
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門
Akihiro Kuwano
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...
Holden Karau
Docker超入門
Docker超入門
VirtualTech Japan Inc.
Recommended
インメモリーデータグリッドの選択肢
インメモリーデータグリッドの選択肢
Masaki Yamakawa
フロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkan
Itsuki Kuroda
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
Serf / Consul 入門 ~仕事を楽しくしよう~
Serf / Consul 入門 ~仕事を楽しくしよう~
Masahito Zembutsu
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
インフラエンジニアのためのcassandra入門
インフラエンジニアのためのcassandra入門
Akihiro Kuwano
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...
PySparkによるジョブを、より速く、よりスケーラブルに実行するための最善の方法 ※講演は翻訳資料にて行います。 - Getting the Best...
Holden Karau
Docker超入門
Docker超入門
VirtualTech Japan Inc.
Java でつくる低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧
Ryosuke Yamazaki
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門
icchy
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
Dylan Ko
シェル・ワンライナー160本ノック
シェル・ワンライナー160本ノック
Ryuichi Ueda
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ
Mitsutoshi Kiuchi
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
Hironobu Isoda
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
kwatch
Web3.0の話をしよう
Web3.0の話をしよう
AtsushiSasaki9
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
NTT Communications Technology Development
Go入門
Go入門
Takuya Ueda
XIDを周回させてみよう
XIDを周回させてみよう
Akio Ishida
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発
Takafumi ONAKA
eBPFを用いたトレーシングについて
eBPFを用いたトレーシングについて
さくらインターネット株式会社
Hyperledger Fabric活用事例:貿易プラットフォームTradeWaltz
Hyperledger Fabric活用事例:貿易プラットフォームTradeWaltz
Hyperleger Tokyo Meetup
What's new in Spring Batch 5
What's new in Spring Batch 5
ikeyat
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
Kentaro Yoshida
ダークネットのはなし #ssmjp
ダークネットのはなし #ssmjp
sonickun
比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)
gree_tech
BLS署名の実装とその応用
BLS署名の実装とその応用
MITSUNARI Shigeo
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
ゼロトラスト三銃士〜Okta x Jamf x Netskopeネタ10連発〜
ゼロトラスト三銃士〜Okta x Jamf x Netskopeネタ10連発〜
Ryo Sasaki
More Related Content
What's hot
Java でつくる低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧
Ryosuke Yamazaki
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門
icchy
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
Dylan Ko
シェル・ワンライナー160本ノック
シェル・ワンライナー160本ノック
Ryuichi Ueda
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ
Mitsutoshi Kiuchi
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
Hironobu Isoda
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
kwatch
Web3.0の話をしよう
Web3.0の話をしよう
AtsushiSasaki9
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
NTT Communications Technology Development
Go入門
Go入門
Takuya Ueda
XIDを周回させてみよう
XIDを周回させてみよう
Akio Ishida
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発
Takafumi ONAKA
eBPFを用いたトレーシングについて
eBPFを用いたトレーシングについて
さくらインターネット株式会社
Hyperledger Fabric活用事例:貿易プラットフォームTradeWaltz
Hyperledger Fabric活用事例:貿易プラットフォームTradeWaltz
Hyperleger Tokyo Meetup
What's new in Spring Batch 5
What's new in Spring Batch 5
ikeyat
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
Kentaro Yoshida
ダークネットのはなし #ssmjp
ダークネットのはなし #ssmjp
sonickun
比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)
gree_tech
BLS署名の実装とその応用
BLS署名の実装とその応用
MITSUNARI Shigeo
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
What's hot
(20)
Java でつくる低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
[우리가 데이터를 쓰는 법] 모바일 게임 로그 데이터 분석 이야기 - 엔터메이트 공신배 팀장
シェル・ワンライナー160本ノック
シェル・ワンライナー160本ノック
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
Logicadの秒間16万リクエストをさばく広告入札システムにおける、gRPCの活用事例
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
Web3.0の話をしよう
Web3.0の話をしよう
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
Go入門
Go入門
XIDを周回させてみよう
XIDを周回させてみよう
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発
eBPFを用いたトレーシングについて
eBPFを用いたトレーシングについて
Hyperledger Fabric活用事例:貿易プラットフォームTradeWaltz
Hyperledger Fabric活用事例:貿易プラットフォームTradeWaltz
What's new in Spring Batch 5
What's new in Spring Batch 5
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
MySQLと組み合わせて始める全文検索プロダクト"elasticsearch"
ダークネットのはなし #ssmjp
ダークネットのはなし #ssmjp
比較サイトの検索改善(SPA から SSR に変換)
比較サイトの検索改善(SPA から SSR に変換)
BLS署名の実装とその応用
BLS署名の実装とその応用
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
More from Ryo Sasaki
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
ゼロトラスト三銃士〜Okta x Jamf x Netskopeネタ10連発〜
ゼロトラスト三銃士〜Okta x Jamf x Netskopeネタ10連発〜
Ryo Sasaki
ビットキーのIoT基盤におけるAWS IoT Rule Action 活用
ビットキーのIoT基盤におけるAWS IoT Rule Action 活用
Ryo Sasaki
[Cloud Native Days Tokyo 2022] たまにはオンプレもいいぞ? GKE と Armadillo IoT で実現する ハイフ...
[Cloud Native Days Tokyo 2022] たまにはオンプレもいいぞ? GKE と Armadillo IoT で実現する ハイフ...
Ryo Sasaki
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
Ryo Sasaki
CNDT2022_たまにはオンプレもいいぞ? GKE と Armadillo IoT で実現する ハイブリッドクラウド
CNDT2022_たまにはオンプレもいいぞ? GKE と Armadillo IoT で実現する ハイブリッドクラウド
Ryo Sasaki
Datadog Agent on CloudRunによるGCPトレービリティ向上
Datadog Agent on CloudRunによるGCPトレービリティ向上
Ryo Sasaki
DynamoDBの初心者に伝えたい初めて触るときの勘所
DynamoDBの初心者に伝えたい初めて触るときの勘所
Ryo Sasaki
OpenStackを導入・1年運用したチームの変化
OpenStackを導入・1年運用したチームの変化
Ryo Sasaki
AWSの真髄
AWSの真髄
Ryo Sasaki
Linux Kernel Parameter Tuning
Linux Kernel Parameter Tuning
Ryo Sasaki
Infrastructre as Ccodeの実現 - Ansibleの基本 -
Infrastructre as Ccodeの実現 - Ansibleの基本 -
Ryo Sasaki
More from Ryo Sasaki
(12)
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
ゼロトラスト三銃士〜Okta x Jamf x Netskopeネタ10連発〜
ゼロトラスト三銃士〜Okta x Jamf x Netskopeネタ10連発〜
ビットキーのIoT基盤におけるAWS IoT Rule Action 活用
ビットキーのIoT基盤におけるAWS IoT Rule Action 活用
[Cloud Native Days Tokyo 2022] たまにはオンプレもいいぞ? GKE と Armadillo IoT で実現する ハイフ...
[Cloud Native Days Tokyo 2022] たまにはオンプレもいいぞ? GKE と Armadillo IoT で実現する ハイフ...
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
CNDT2022_たまにはオンプレもいいぞ? GKE と Armadillo IoT で実現する ハイブリッドクラウド
CNDT2022_たまにはオンプレもいいぞ? GKE と Armadillo IoT で実現する ハイブリッドクラウド
Datadog Agent on CloudRunによるGCPトレービリティ向上
Datadog Agent on CloudRunによるGCPトレービリティ向上
DynamoDBの初心者に伝えたい初めて触るときの勘所
DynamoDBの初心者に伝えたい初めて触るときの勘所
OpenStackを導入・1年運用したチームの変化
OpenStackを導入・1年運用したチームの変化
AWSの真髄
AWSの真髄
Linux Kernel Parameter Tuning
Linux Kernel Parameter Tuning
Infrastructre as Ccodeの実現 - Ansibleの基本 -
Infrastructre as Ccodeの実現 - Ansibleの基本 -
きっと今すぐ使えるハッシュの基礎知識
1.
きっと今すぐ使えるハッシュの基礎知識 @佐々木 了
2.
みなさんハッシュについて、 どのぐらいのことを知っていますか? 勉強しないとなかなか知らないはず 今日は非常に身近だけど、 あんまり知らないであろうハッシュの話をします
3.
すごい大雑把な目次 • そもそもハッシュって何? • 認証のときハッシュを意識しないとかなり問題になるよ@RADIUS •
例 • 余談
4.
ハッシュって何? • MD5とかSHA1とかよく見るアレ • ハッシュ関数の出力結果をハッシュ値と呼ぶ •
色々ひっくるめてハッシュと呼ばれることが多い • 実際にもハッシュと呼んでいいが、 この発表内では正確にハッシュ関数とハッシュ値をわけて書いてます • 他にもメッセージダイジェストあるいはダイジェストと呼ぶ • SSL証明書とかだとフィンガープリント • ファイルの改ざん確認用途としては、チェックサム • と、呼ばれることが多い • ハッシュ関数とは? • あるデータが与えられた場合にそのデータを代表する値を得る関数 ※Wikipediaからの引用
5.
は?
6.
簡単に言うと • 例えば・・・ • hogehoge
=> 01234 • foobar => 56789 • データに対しての一意の値だと思えば良い • 1文字でも違えば、それを基にして出力されたハッシュ値は 必ず異なるものになる
7.
暗号学的ハッシュ関数 情報工学の世界で用いるハッシュ関数はただのハッシュ関数ではなく、 暗号学的ハッシュ関数が用いられる
8.
暗号学的ハッシュ関数 • 暗号学的ハッシュ関数は以下の要素を持つ必要がある • 原像計算困難性 •
先程の例でいうなら、”01234”というハッシュ値があったとき、 その値の元データが”hogehoge”であるということが、わからないこと • 衝突耐性 • ハッシュ値が”01234”になるデータが”hogehoge”以外に存在しないこと
9.
暗号学的ハッシュ関数 • 上記2つを満たしたハッシュ関数から出力されたハッシュ値01234は この世に2つとない値であり、この値はすなわち、 “hogehoge”という文字列を表すただ1つの値であるといえる • もちろん出力した人間からすれば、 hogehoge
= 01234とわかるが、 知らない人間からすれば01234がhogehogeであるとはわからない • もちろんそれを計算で求めることもできない (逆算することができない)
10.
暗号学的ハッシュ関数にはたくさん種類がある • よく使われる連中 • NTハッシュ •
MD5 • SHA1 • SHA2 • SHA3 (新人) • ハッシュ関数が異なれば、出力されるハッシュ値は異なるものになる • 任意長のデータ列から固定長のハッシュ値を出力する • そのためハッシュ関数が異なれば、ハッシュ値も長さも異なるものになる • 例えばMD5の場合出力長は128bit • 入力する文字列が3文字だろうが、1000文字だろうが、 等しく128bitの文字列が出力される
11.
何に使われる? • 完全性の担保 • 完全性:
データが正確/完全である性質 • 簡単に言えばデータが改ざんされていないかどうか?ってこと • ハッシュ値はそのデータを表す一意のデータであるため、 1bitでも変わればハッシュ値は必ず異なるものになる • つまり改ざん検知に使える • 元データの作成者が「私が作ったこのデータのハッシュ値はこれだよー」と伝 え、データをもらった人間がそのデータを使ってハッシュ値を生成して、 教えてもらったハッシュ値と比較し合致すれば、 そのデータは正しいデータだといえる • 違った場合は途中経路で改ざんされた可能性がある • 少なくとも正しいデータではないのは間違いない
12.
参考程度に・・・ URL: https://gist.github.com/gzock/99fc50a53143bcdba8de3488ce347afd [root@test ~]#
./gen_hash.py `python -c "print 'A'*1"` NT-Hash: c5dd1c2bc8719c01b25b4eb2692c9fee MD5: 7fc56270e7a70fa81a5935b72eacbe29 SHA1: 6dcd4ce23d88e2ee9568ba546c007c63d9131c1b SHA2_256: 559aead08264d5795d3909718cdd05abd49572e84fe55590eef31a88a08fdffd SHA3_256: 1c9ebd6caf02840a5b2b7f0fc870ec1db154886ae9fe621b822b14fd0bf513d6 [root@test ~]# ./gen_hash.py `python -c "print 'A'*1000"` NT-Hash: d607b9ae2dfc693beb4f3e0924f5aab3 MD5: 7644672d049290f0390d9c993c7d343d SHA1: 3ae3644d6777a1f56a1defeabc74af9c4b313e49 SHA2_256: c2e686823489ced2017f6059b8b239318b6364f6dcd835d0a519105a1eadd6e4 SHA3_256: 9a0ad8e2b4dd2bba189511f7759bcff54e3455046303d3cf86cb0c1747224936
13.
理論はここまで! ただし、非常に重要なことなので覚えて欲しい
14.
何故これを説明したのか? • ハッシュという言葉自体は知っていても、 正しく理解していない人が多いのでは?と思ったから • この辺を理解できているかどうかで、 これから説明する話の理解度に関わる
15.
認証の話
16.
現在、ITシステムで使用されているユーザー認証には 様々なハッシュ方式が使われている ハッシュを理解していないと認証の際にも問題になりやすい
17.
パスワードがハッシュ化されていた場合、 原則的に認証はできない • 例えばRADIUS認証 • 具体的に言って無線LANでWPA2-Enterpriseを使う場合 •
認証サーバー側はFreeRADIUS + OpenLDAP の構成 • OpenLDAPにユーザーアカウント情報を格納、平文のパスワードは存在しないとする • この場合、実際の具体的な認証方式はEAP-PEAPであり、 さらに下側でPEAP-MS-CHAPv2が使用される • この場合ユーザーパスワードはNTハッシュというハッシュ方式で認証サーバーに届く • もし認証サーバー側のLDAPの中でパスワードがMD5で保存されていたら? • 先に述べた通り、ハッシュ値は逆算することはできない • 誰も平文のパスワードを知らない • ハッシュ方式が違えば、ハッシュ値は異なる • つまり、クライアントから届くハッシュ値とサーバー側で把握しているハッシュ値は異なる • 認証失敗
18.
MS-CHAPv2のシーケンス図
19.
どうにかならない?なるっしょ?
20.
ならない、どうあがいても無理 それが出来るなら、 地球上の全ての情報セキュリティがぶっ壊れる
21.
一応逃げ道としては・・・ • WPA2-Entは基本EAP-PEAPを使うが、 規格上、認証方式を様々切り替えることが可能。 他の方式としてEAP-TTLSという方式があって、 それならパスワードを平文で投げることが可能なので認証できる • が、Windows
Vista以降では非サポート • なので、なかなかこういった対応は難しい • ちなみにAndroidやiOSならいける
22.
例2 • 新規にLDAPをいれることになって、ユーザーパスワードを ハッシュ化して保存しておきたい • 安易にSHA2とかを選んではいけない •
私が知っている限り、主要な認証方式の中でSHA2を使って 認証するプロトコルは存在しない
23.
とりあえずの鉄板 • 鉄板はNTハッシュ • Windowsを前提にするならね •
NTハッシュはMicrosoftが開発したハッシュ方式 • なのでWindows関連の認証系に全面的に採用されている • EAP-PEAPについては開発にMSが携わっている関係で、 MS-CHAPv2が内部的に使用され、結果NTハッシュが使われている • 無線LANにせよ、dot1xにせよ、とりあえずは安心できる • 認証元のクライアント端末は多くの場合Windowsだろうし
24.
パスワードを平文で保存するならOK? • もちろん、ただそれが許されるならね・・・ • 例えばFreeRADIUSとかを使うなら、平文で置いておけば、 飛んでくる認証方式によって 自動的にハッシュ化して合わせてくれる •
例えばCHAPで飛んできたらチャレンジを使って、 自動的にMD5を生成してくれるし、 PEAP-MS-CHAPv2できたらNTハッシュにしてくれる
25.
ん?逆に言えば平文で投げてくれば、 どの認証方式でもOK? • その通り • 平文で投げられたものは認証サーバー(今回の例でいうとFreeRADIUS) で自動的にハッシュ化して合わせてくれたりする •
まぁ設定次第だが・・・ • 具体的に言うと、PAP • PAPは完全に平文でパスワードを投げてくる • NW機器のRADIUS認証はPAP方式がまだまだ現役 • それ以外では下火どころか絶滅状態 • 現代ではサポートOSが壊滅的にないので、 現実的にこういったことをやる機会は少ないだろう
26.
参考資料 ※FreeRADIUSを使用する場合
27.
なんかMD5やばいって言われてない? • 致命的な脆弱性が既に発見済み • IEやChrome/FirefoxなどではMD5を使ったSSL証明書でエラーが出る •
正規の署名があったとしても • MD5のSSL証明書は絶対に使っちゃダメ • その他認証などにおいてもMD5は極力使わないように使用 • SHA1 or SHA2が使えるならそっちを使うこと • ただし、ファイルの改ざん確認とかでMD5を使うのは全然あり • 任意のハッシュ値に対して任意のデータを作成できるような脆弱性は見つかっていない • 弱衝突耐性は破られていない • つまり、ファイルの差し替えなどをやられる可能性は限りなく低い
28.
SHA1は?最近SHA2使えって言われるよね • SHA1もMD5ほどのクリティカルなものではないが脆弱性が見つかっている • 2017年2月、Googleが異なるファイル、同一ハッシュ値のファイル作成に成功した •
これにより、SHA1の安全神話は完全に崩れる • 誰もがこんなことをできる、というわけではないが・・・ • SHA1を使ったSSL証明書も主要Webブラウザでは既にサポートされていない • 有効期限内の正式な署名があるSSL証明書であっても警告が表示 • 主要な署名機関(ベリサインとかね)では既にSHA1のSSL証明書発行を停止 • 一刻もはやくSHA2でのSSL証明書に移行するべき • SHA2も完璧ではない • SHA2はSHA1を拡張した方式 • 基本的な理論はSHA1と同じなため、正直な所SHA2も安全ではない • いやまぁ当分は大丈夫なんだけど、安心はしきれない
29.
2015年8月SHA3が公開 • SHA1/SHA2とは全く違う新理論を使用 • もうそれSHAじゃなくね?って世界からツッコミ •
今後ゆっくり移行していくとは思うが、恐らくメインで使われ るようになるのはかなり早くても5年後とかだろう・・・
30.
ハッシュ化のやりかた • 知らない人/やらない人が多いが、デフォでやれる • Win •
MD5: certutil -hashfile [filename] md5 • SHA1: certutil -hashfile [filename] • SHA2_256bit: certutil –hashfile [filename] sha256 • Linux • MD5: md5sum [filename] • SHA1: sha1sum [filename] • SHA2_256bit: sha256sum [filename]
31.
ハッシュって使う? 理論的に覚えておけば良いだけでは? • 小さいファイルとかどうでもいいファイルならまだしも、 でかいファイル、重要なファイルは必ずハッシュ値を確認する癖をつけよう • 例えばisoファイル落としたとして、それを焼いてインストールしようとしてよくわからんエ ラーで落ちる・・・ なんでだ?焼くのミスった?ハードウェアか何か悪い? •
ハッシュ値比べてみなよ • そうでなくても、ファイルが改ざんされていたらどうするの? • 何かファイルをコピーしたりして、終わった後にファイルサイズ確認して OKとする人いるけど、それは本来正しいとはいえない • ハッシュ値を確認するべき
32.
こんな感じで改ざん ※ソースコードの変更ではなく、バイナリ自体を改ざん C:¥Users¥testuser¥Documents¥Visual Studio 2013¥Projects¥sample1¥sample1¥bin¥Release> C:¥Users¥testuser¥Documents¥Visual
Studio 2013¥Projects¥sample1¥sample1¥bin¥Release>dir ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 7AD9-E1F6 です C:¥Users¥testuser¥Documents¥Visual Studio 2013¥Projects¥sample1¥sample1¥bin¥Release のディレクトリ 2018/11/21 16:02 <DIR> . 2018/11/21 16:02 <DIR> .. 2018/11/21 15:59 8,192 fake_sample1.exe 2017/04/18 21:07 8,192 sample1.exe 2017/04/18 21:04 187 sample1.exe.config 2017/04/18 21:07 19,968 sample1.pdb 2017/04/18 21:07 23,168 sample1.vshost.exe 2017/04/18 21:04 187 sample1.vshost.exe.config 2017/03/19 06:00 490 sample1.vshost.exe.manifest 7 個のファイル 60,384 バイト 2 個のディレクトリ 39,067,533,312 バイトの空き領域 C:¥Users¥testuser¥Documents¥Visual Studio 2013¥Projects¥sample1¥sample1¥bin¥Release> C:¥Users¥testuser¥Documents¥Visual Studio 2013¥Projects¥sample1¥sample1¥bin¥Release> C:¥Users¥testuser¥Documents¥Visual Studio 2013¥Projects¥sample1¥sample1¥bin¥Release>certutil -hashfile sample1.exe SHA1 ハッシュ (対象 sample1.exe): 03e6ac1afd4727f34c72b7b9f41f2f40451dc54d CertUtil: -hashfile コマンドは正常に完了しました。 C:¥Users¥testuser¥Documents¥Visual Studio 2013¥Projects¥sample1¥sample1¥bin¥Release>certutil -hashfile fake_sample1.exe SHA1 ハッシュ (対象 fake_sample1.exe): e0bbd12a2b946fb243455317ac925c9d6d9e3a0f CertUtil: -hashfile コマンドは正常に完了しました。 オリジナル 改ざん後
33.
こんな感じで改ざん ※ソースコードの変更ではなく、バイナリ自体を改ざん • パッと考えて文字長が変わらなければファイルサイズも 変わらないのでは?と思うが、今回は文字長も変えてみた • 今回は適当に作ったGUIアプリのテキストを書き換えたが、 動作自体を変えることも可能 •
相当面倒くさいけど・・・ • 見た目と動作は全く変わらないが、 実はバックグラウンドでWebサーバーからマルウェアを落としてきて 実行させるとか • そもそも大体の人はファイルサイズもハッシュも気にしていないので、 見た目が変わってなければ、ほぼ気づかれない
34.
実際の事件 Buffalo ドライバー改ざん URL:
http://buffalo.jp/support_s/20140602_2.html • 2014年6月 BuffaloのドライバーDLサイトがハッキングされ、 ドライバーファイルがマルウェアに改ざんされた • 正規のBuffaloのドライバーDLサイトがドライバーを落とし、 インストールを実行すると、 ドライバーではなくマルウェアがインストールされる • 被害者は約600人 • 正確には593件のIPアドレスから1046回のDLが記録 • アンチウイルスソフトでは検知不可 • Buffaloからの申告により即日リリースのパターンファイルにて検知可能に
35.
まとめ • ハッシュ値は任意のデータを表す一意のデータ • ハッシュ関数にはたくさん種類があって、 それぞれ出力されるハッシュ値や長さは異なる •
認証の際、認証方式とパスワードのハッシュ形式は 一致させる必要がある • 各種ハッシュ値の生成は標準コマンドで簡単にできるので、 積極的に利用していこう
36.
興味があれば・・・ • ハッシュは現在の情報セキュリティ分野におけるかなり重要な技術 • そのためセキュリティに寄った話だと以下の話もする必要があった •
ソルト付きハッシュ • SMD (Salted MD) • SSHA (Salted SHA) • レインボーテーブル • ストレッチング • この辺の話をするとなると、もっと時間がかかってしまうので今回は割愛 • 興味ある方は声かけて下さい・・・
Download now