Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

プロ生2017名古屋ーセッション intel apollo lakeとsha拡張命令

100 views

Published on

名古屋で開催された第40回プログラミング生放送(プロ生)で登壇
Intel Apollo Lake(Goldmont)とSHA拡張命令を使ったセッションです。

Published in: Technology
  • Be the first to comment

プロ生2017名古屋ーセッション intel apollo lakeとsha拡張命令

  1. 1. Intel Apollo LakeとSHA拡張命令 Masaki Ota(まぐろさんちーむ) @MagurosanTeam
  2. 2. まずはじめに 萌える要素のないくっそ面白くもないセッションです。 面白くないと思ったら果物でも食べて糖分補給を。
  3. 3. もとい 今回のセッションの中身としてはこんな感じです。 ● 割と長い自己紹介 ● SHAハッシュ暗号の紹介 ● Intel Goldmont /Apollo Lakeアーキテクチャについて ● Intel SHA拡張命令について ● 巨大掲示板のあれ ● いろんなCPUのSHA命令の性能 ● 時間余ったら例の採用試験の話するかも
  4. 4. 自己紹介的な何か
  5. 5. Masaki Ota aka Magurosan Twitter: @MagurosanTeam ● Intel Architecture Reference Manualが愛読書 ● ARMv8A, ESP8266(Xtensa L106)なんかも叩いてる ● Cellとかあったね昔 ● たぶんRubyが第一言語 ● 勉強会コミュニティ: IoT, 低レイヤーコンピューティング全般 ● AWS採用試験落ちました About Me アイコン: @niewals さん
  6. 6. 底知れぬ物欲の塊
  7. 7. 底知れぬ物欲の塊
  8. 8. 底知れぬ物欲の塊
  9. 9. 底知れぬ物欲の塊
  10. 10. 底知れぬ物欲の塊
  11. 11. 底知れぬ物欲の塊
  12. 12. 底知れぬ物欲の塊
  13. 13. 会社やめました&求職中 ● 10月に会社やめて会社と戦争中 ○ 違法行為告発系のあれ ○ 控えめにいってガチなやつ ■ 会社側の暴挙に処分下らないとこっちの生活死ぬ ○ 労働局⇒労働基準監督署⇒検察庁⇒名古屋地裁      ↑いまここ ↑ここから予定 ○ この戦争、後々ニュースになるやつなんじゃ? ● ただいまメンタル療養しながら求職活動中 ○ ところで、本日は勤労感謝の日です ○ 雇用保険制度のおかげで失業給付制度が利用でき、国と全ての労働者に感謝しております ○ そんな私も勤労者に返り咲くべく名古屋で仕事探してます
  14. 14. SHAとは何か?
  15. 15. 可逆暗号と暗号学的ハッシュ ● 可逆暗号 - 鍵あるいは鍵の対で暗号化と復号化が行える ○ 共通鍵暗号(DES, AES, Camelliaなど) ■ 主にデータの暗号化用途に用いる ○ 公開鍵暗号(RSA, ElGamalなど) ■ 暗号化は公開鍵を使えば誰でもできる。復号化は秘密鍵を持つ人のみ行える。 ● 暗号学的ハッシュ(MD5, SHA1~3など) ○ パスワードの符号化に用いられる ○ デジタル署名などに用い、データの復号を意図しない ○ 出力結果が同じであれば鍵が正しいとみなす ■ 鍵の長さに対して出力値が小さいため一つのハッシュに複数の鍵が存在することが起こりうる ○ 主にハッシュ専用のアルゴリズムが用いられるが、 DESベースのcrypt(3)のように、共通鍵暗号を ベースとしたハッシュアルゴリズムも存在する
  16. 16. SHA1はどういうハッシュ暗号? A, B, C, D, Eで表される5つの32ビット整数による 160ビットの状態空間に対し、 ● ビットローテート演算(<<<) ● 3入力のビット論理演算(F) ○ 20ラウンド毎に式を変更 ● 足し算(+) ○ 上記の演算結果および鍵 W,定数Kを加算 ● データの並べ替え などで構成される「ラウンド」(右)を、80回処理する
  17. 17. SHA1とはどういうハッシュ暗号?(続き) ● W1 ~W16 は最長512ビット(64バイト)の暗号化鍵 W17 ~W80 はW1 ~W16 を種としてXOR + Rotateにより生成 ● Kは各ラウンド毎の定数 ● 状態空間のビット幅と出力ビット幅は160ビットで共通 ● 問題点 ○ 複数の暗号学的弱点が指摘されており、実質的な強度は 160ビットを 大きく下回っている ○ そもそも鍵の長さ(448→512ビット)に対して状態空間が狭すぎる
  18. 18. SHA1のコード例(かなり手本通りなC実装) /* 1~20ラウンド目 */ for (t = 0; t < 20; t++) { temp = rotr(5,a) + ((b & c) | ((~b) & d)) + e + w[t] + k[0]; e = d; d = c; c = rotr(30,b); b = a; a = temp; }
  19. 19. SHA1のコード例(かなり手本通りなC実装) /* 1~20ラウンド目 */ for (t = 0; t < 20; t++) { temp = rotr(5,a) + ((b & c) | ((~b) & d)) + e + w[t] + k[0]; e = d; d = c; c = rotr(30,b); b = a; a = temp; }
  20. 20. shatterd :粉砕 その攻撃以前から、SHA1の「理論上の脆弱性」はいくつか論文で指摘がなされていた。 2017年2月、Googleらの研究チームが署名(SHA1)が全く同じ2つのPDFを生成するこ とに成功したと発表 ⇒脆弱性の実証がなされた 攻撃に必要な計算量はシングルCPU6500年分 / シングルGPU110年分相当 総当たり法の10万倍以上高速ともいわれる SHA1の終焉を告げる SHAttered
  21. 21. SHA-1の強化版にあたるSHA-2 SHA-2はワード長の違う複数のバージョンが存在 ● SHA-256 ○ 多分一番使われてる ○ ワード長はSHA-1と同じ32ビット、A~Hの8ワード ○ 一般的にSHA-2といえば ○ 派生にSHA-224がある ● SHA-384 ● SHA-512 ○ 1つのワード長を64ビットに ○ SHA448, SHA512/224, SHA512/256 はこれの派生
  22. 22. SHA1⇒2:基本原理を継承しつつデータ幅拡大 ● 状態空間(=ハッシュ長)が32ビット×8の256ビット(SHA-512は64ビット×8) ● 一方でラウンド数は64ラウンドに削減 ● なんとか強度は担保されてるっぽい SHA1 SHA2
  23. 23. SHA2がSHA1より安全な理由 1. 単純にSHA1より内部状態・出力共に96ビット増えたため、特定のハッシュ値を得る のにかかる計算量も単純に2の96乗に比例して大きくなる 2. SHA1よりも鍵の偏りが出力に現れにくい
  24. 24. SHA3(Keccak)について ● スポンジ関数 - SHA1 / SHA2とまったく設計思想の異なるハッシュアルゴリズム ● リトルエンディアンの64ビットCPUでソフト実装がしやすい ○ SHA1とSHA2はビッグエンディアン向けでした ● 1600ビットの内部状態空間 ● 512ビットないし576ビットの出力 ○ 64ビット単位で可変
  25. 25. Intel Goldmont マイクロアーキテクチャ
  26. 26. SHA拡張命令の対応状況 ● IntelのCPUでは今回照会するSHA拡張命令をサポートしているのは 現時点でGoldmontのみ ● Core/Xeon系統で対応するのは10nmプロセスのCannon Lake以降
  27. 27. Goldmontってなんぞや? ● 早い話が最新世代のAtom ● ただし消費者向け製品にはAtomというブランド名ではない ○ Apollo Lake(TDP6W, 10.5W) ■ 主にノート・タブレット向け: Pentium N4200およびCeleron N3350・N3450 ■ 小型デスクトップ向け: Pentium J4205およびCeleron J3355・J3455 ○ 組み込み向けAtom Aシリーズ、Tシリーズ(Apollo Lake) ○ 小型サーバ向けAtom C3000シリーズ(Denverton) タイトルのApollo Lake = Goldmontアーキテクチャの消費者向け製品群という理解でほ ぼ間違いない
  28. 28. フロントエンドの強化 ● デコーダ数を2命令から3命令に拡大 ● サイクルあたり20バイトの命令フェッチ帯域 ○ サイクルあたり16バイトのCore 2 Duo/QuadおよびCore i*シリーズを凌ぐ ● 16KのL2プリデコード命令キャッシュ ● などなど
  29. 29. バックエンドの強化 ● 整数ALUの数を2→3に拡大 ● SSE FMULユニットを128ビット化 ● 各種命令の高速化 ● 新命令追加(MPXやSHAなど) ● ほか ⇒Core 2と同等レベルの性能を実現
  30. 30. 前世代比 1.56倍のCPU性能 / 1.41倍のGPU性能 CPU側:SPECint_2000および同_rate_2000の推 定値 GPU側:GFXBench 3.0 - T-Rex 参考までに・・・ ● T5700/T5500は、Joule 570X/550Xモ ジュールに組み込まれている CPUのモ ジュール ○ 中身はPentium N4200/J4205などのApollo Lakeと同一と思われる) ○ そのJouleは今年生産終了が決定してます ● 比較対象はAtom Z8500じゃなくてPentium N3700とかじゃないの?
  31. 31. Apollo Lakeはできる子? Atom系SoCのフラグシップはCore Mのモンキーモデルより強いのか? ● N型番とY型番TDPはともに6W ○ Apollo Lake - N はSDP4W(タブレットPCの利用シーンを想定した廃熱設計) ○ Pentium 4xxxYは最小4.5Wでコンフィギュレーション可能(ただしクロックが落ちる) ● 同じコア数なら弱いが4コアなら強いかも
  32. 32. Skylake 2コア vs Apollo Lake 4コア(モバイルノー ト)
  33. 33. Pentium 4405Y(Skylake) vs N4200(Apollo Lake) Cinebench R11.5 シングルスレッド Cinebench R11.5 マルチスレッド
  34. 34. Pentium 4405Y(Skylake) vs N4200(Apollo Lake) Cinebench R11.5 レンダリング(内蔵GPU性能) http://www.cpu-monkey.com/en/compare_cpu-intel_pentium_4405y-566-vs-intel_pentium_n4200-658 ● GPUの性能も(少なくともCinebenchでは)Apollo Lakeのほうが高い ○ N4200の内蔵GPUはKabylakeと同じ第9世代。同じ第9世代の4415Yだとどうか?
  35. 35. 多分こういうこと ● シングルスレッド性能でそれほど差がつかない理由 ○ クロック当たり性能は Core*系統のほうがまだ倍くらい速いはず。しかし ■ Pentium-4405Yはクロック上限が低い ■ Pentium-N4200は2.4GHzまでブースト可能 ● マルチスレッド性能で逆転する理由 ○ コアあたりの性能差をコア数の物量でカバー ■ Pentium-4405Yは2コア+HyperThreading ■ Pentium-N4200は4コア
  36. 36. やっと本題? SHA拡張命令について
  37. 37. SHA1 / SHA2(256)用の新命令 ● SSEのXMMレジスタを使ったSIMD拡張命令(強いて言えば「SSE4.4」) ○ AVXのVEXエンコード版命令は無し ● 計7命令 SHA1を4ラウンド分実行する命 令 SHA1のW[k]を4つずつ更新する命 令 SHA256のW[k]を4つずつ更新する命 令 SHA256を2ラウンド分実行する命 令
  38. 38. SHA1拡張命令の概要 ● SHA1MSGS1 / SHA1MSGS2 ○ 暗号化鍵からW[16..79] を生成する命令 ○ SHA1MSGS1 + PXOR + SHA1MSGS2の3命令で4ワード分を一括生成できる ● SHA1RNDS4 / SHA1NEXTE ○ 2つの128ビットXMMレジスタに展開された SHA1の内部状態を4ラウンドずつ更新する ○ 2命令で4ラウンド更新 ○ 値保存のためにMOVDQAが必要なので実質3命令で4ラウンド  ⇒ 16×3 + 20×3 =108(+α)命令ほどでSHA1Transform関数を実装可能?
  39. 39. 122命令 SHA1Transform相当の命令をSHAで実装した場合 x86-64でのアンロール実装で1,365命令で、10分の1以下の命令数
  40. 40. SHA2拡張命令の概要 ● SHA256MSGS1 / SHA256MSGS2 ○ SHA256MSGS1+PALIGNR+PADDD+SHA1MSGSの4命令で4ワードのW[t]を一括生成でき る ● SHA256RNDS2 ○ 2つの128ビットXMMレジスタに展開された SHA256の内部状態を2ラウンドずつ更新する ○ 2命令で2ラウンド分更新 ■ PADDD + SHA256RNDS2 ■ PSHUFD + SHA256RNDS2 ⇒こちらもかなり少ない命令数でいける
  41. 41. SHA拡張命令をソフトで利用するには ● Visual C++, Clang, GCCなどで組み込み関数として利用可能 ● ローレベルをたたく必要のない人とか高級言語からさわりたいだけの人はOpenSSL とかのライブラリ使ったほうがいいかも(自動判定で使ってくれる) ● Xbyakとかもあるよ
  42. 42. Xbyak ー x86 JIT Assembler for C++ SHA命令サポート追加してパッチ投げたの、私です(MPXと同時期) Cybozu Tech Conference 2016 バグの調べ 方 より
  43. 43. XbyakでSHA1のコードを書いてみた例 アンロールする必要がないのでかなり コンパクトなコードに 「template使えばXbyakなんか使わなく てもコンパクトに書ける」などとマサカリ 飛んで来そうですが・・・
  44. 44. SHAといえば 某巨大掲示板のアレ
  45. 45. あの掲示板の「トリップ」について ● 暗号としてはザルもいいところ ○ SHA1の160ビット出力をBASE64エンコード(1文字6ビット)したものを12文字抽出 ⇒たったの72ビットの出力しかない ○ “SHAttered”攻撃で用いられたような方法を使えば、それほど大規模でないサーバクラスタでも実用 的な時間で割れるのでは? ● 根本的な話として、鍵情報を生のHTTPで送ってる時点でセキュリティもへったくれ もない ○ たとえば「2chに書き込めるクラウドサービス」を公開すれば有名コテハンのトリップも抜き放題 ○ ↑そこはプロクシサーバでもいい ◆TripTripTrip
  46. 46. SHA1ベースのトリップはザルなのか? ● SHA1の80ラウンドのうち78ラウンド目で、トリップ の72ビットのうち後ろ8ビットは確定する筈。なぜ なら ○ 80ラウンド目のCは、79ラウンド目のBに30ビットの左 ローテートかけて移動 ○ 79ラウンド目のBは、78ラウンド目のAをそのまま移動 ● 78ラウンド目の時点で8ビット分のマッチングを行 えば255/256の確率ではずれを除外できる ● 後ろ88ビット、すなわちCの下位24ビット, D, E は、攻撃者にとって都合のいい値を指定できる このあたりは素人目にもわかりそうなこと 必要なのはここだけ
  47. 47. SHA1ベースのトリップはザルなのか? その2 ● トリップ検索プログラムの生成するトリップのキーの長さはたいてい固定長である ○ たとえばDayTripperというソフトの場合、キーは 12文字固定 ■ すなわち k[3]~k[13] はすべて0であることが確定 ■ K[14..15]は長さ情報から必然的に決まる ● これらの条件を仮定することで、k[16]~k[79]の生成時の演算ショートカットも可能 であるほか、ラウンド4~16あたりも演算を端折ることが可能 ○ たとえば(C言語の式でいうと) n^0 == n とか m+0 == m っていうこと これだけの情報でも、少なくとも78ラウンドより少ない演算量でマッチ判定まで行ける えーと・・・これ以上言っていいのかな?(ややハッタリ気味)
  48. 48. まあ、私もぶっちゃけ詳しくないのですが ● オープンソースなトリップ検索ツールを見る限りのおおよそで ○ SHA1の攻撃の手法を用いたトリップ検索ソフトは今のところ見当たらず。 ○ CPUやGPUの力任せにSHA1のハッシュ値を生成してはマッチ判定 ● 数学できる人が本気出せば簡単に崩壊するのでは? ● こっから嘘言ってるかも ○ “SHAtterd”は鍵の片方を特定しない「衝突攻撃」なので、理論上 160ビットの半分の80ビット分程度 の演算量で衝突するペアを見つけられる(実際にはそれより少ない実効演算量まで落とし込むテク ニック使用)が、トリップは 72ビットなので、任意のトリップと完全一致のものを見つけるだけ(キーは 同一である必要なし)、理屈上 SHAtterdの256分の1の演算量でいけるはず。 ○ もちろん、生成トリップを特定せず、同一トリップを生成する鍵のペアをなにかしら見つける演算量は 36ビット程度で済む(トリップ検索ソフトを回してる誰かしらと誰かしらが(別キー・同一キー限らず)同 一のトリップになる可能性が高いということ)
  49. 49. せっかくだからSHA拡張 でトリップを検索してみる
  50. 50. 既製のSHA1並列化実装 (トリップや暗号通貨採掘) SSEやAVX, GPGPUなどを使って複数のSHAブロックを一括処理しスループットを向 上 ● SSE/AVX1: 4並列で実行 ● AVX2: 8並列で実行 ● CUDA: 32×n並列 ちなみにDES(10桁版)トリップは、”Bitslice DES” といって1スレッドあたり128並列とか 256並列で処理するようになっている。
  51. 51. そんなこんなでSHA拡張命令でトリップ検索を実装
  52. 52. 出来上がったもの ● 一部のワード決め打ちの演算ショートカットのみ使用 ● 論文で用いられているような解析方法は一切使わず ● ようはちょっと頭のいいBrute Force実装
  53. 53. 60MTrips/sと既成ソフト(SSE2による4並列)のほぼ3倍速 通常の3倍速の SHA
  54. 54. オレオレトリッパーの今後の課題 ● AVX-512対応したトリップ検索ソフトまだ無いよね? ● Xbyakで動的生成対応(書きかけ) ● 論文読み込んでガチ解析
  55. 55. 他のCPUのSHA性能
  56. 56. Geekbench 3にSHA1/SHA2のベンチ項目あった ● Geekbench3はSHA拡張命令が使える場合は使うようになってるらしい (x86, ARM共通) ● Geekbench 3 /4 の登録スコアが検索可能 Geekbench Browser https://browser.geekbench.com/
  57. 57. Pentium J4205 vs Raspberry Pi 3 (BCM2709) ともに4コア、クロック差はおおよそ2倍 ⇒SHA1で10倍以上の差をつける一方、SHA2はせいぜいクロック並み ソース:Geekbench 3 - Pentium J4205 vs Raspberry Pi 3 https://browser.geekbench.com/geekbench3/compare/8147460?baseline=8458121
  58. 58. そういえばあのCPUもSHA拡張命令使えたよね?
  59. 59. 確かに使えるようです(AMD Ryzen) ※画像は拾い物です ● 最大8コア16スレッド ● AVXなどのSIMDの性能はIntelより控えめ (Atom以上Core未満)
  60. 60. Ryzen持ってないのでどこそこの記事から考察 マイナビさんの記事によるとSHA1はそれほど速くなさそう(SHA2は256に限れば強い)  http://news.mynavi.jp/articles/2017/03/02/ryzen/ SHA1: i7-7700K < Ryzen 1800X < i7-6950X SHA2-256: i7-7700K< i7-6950X    < Ryzen 1800X コア数相応?
  61. 61. Ryzen持ってないのでどこそこの記事から考察 マイナビさんの記事によるとSHA1はそれほど速くなさそう(SHA2は256に限れば強い)  http://news.mynavi.jp/articles/2017/03/02/ryzen/ SHA1: i7-7700K < Ryzen 1800X < i7-6950X SHA2-256: i7-7700K< i7-6950X    < Ryzen 1800X SHA256だけ突出
  62. 62. Ryzen持ってないのでどこそこの記事から考察 マイナビさんの記事によるとSHA1はそれほど速くなさそう(SHA2は256に限れば強い)  http://news.mynavi.jp/articles/2017/03/02/ryzen/ SHA1: i7-7700K < Ryzen 1800X < i7-6950X SHA2-256: i7-7700K< i7-6950X    < Ryzen 1800X アクセラレーションの効かない 512は 4コアの7700Kを下回る
  63. 63. SHA1モンスター、それがApollo Lake SHA1はシングルでもRyzen 1800X@3.94GHzをダブルスコアで圧倒。 マルチコアでのスコアもクロック差(2.4GHzと3.94GHz)とコア数(4コア対8コア)のハンデ を乗り越えてほぼ互角。控えめに言って化け物では? ソース: Geekbench 3 - Pentium J4205 vs Ryzen 1800X https://browser.geekbench.com/geekbench3/compare/8147460?baseline=8468010
  64. 64. 気になるもの:Atom C3000シリーズ “Denverton” ● 16コアでわずか32Wの低消費電力(C3955) ● Goldmontのサーバ版SoCこと、最大16コアだから単純に同クロックのApolloLakeよ り4倍速いはず ● お値段は8コア搭載のマザーボードでも400ドル程度 sha1coinのマイニングがクッソ速いマシン作れそう ※写真はDFI社 DV970
  65. 65. とりあえずありがとう ございました

×