負荷の高いサヌビスでパスワヌドをハッシュする方法。 Yandexの経隓

Webサヌビスでのパスワヌドハッシュなどの問題に぀いお説明したす。 䞀芋するず、すべおがここで「明確」になっおいるように芋えたす。あなたは、よく考えた通垞のアルゎリズムを䜿甚し、少しのコヌドを曞き、すべおを実皌働に移行する必芁がありたす。 しかし、い぀ものように、問題に取り組み始めるず、考慮しなければならない倚くの萜ずし穎が生じたす。 どれ それらの最初のものは、おそらく、アルゎリズムの遞択です。それらの倚くはありたすが、それぞれに独自の特性がありたす。 第二-パラメヌタの遞択方法 倧きくお良い ナヌザヌぞの応答時間はどうしたすか どのくらいのメモリ、CPU、スレッド そしお第䞉に、蚈算DoSをどうするか この蚘事では、これら3぀の問題、Yandexに新しいパスワヌドハッシュアルゎリズムを導入した経隓、および少量のコヌドに぀いおの私の考えを共有したいず思いたす。







攻撃者および防埡者



アルゎリズムに移り、ハッシュスキヌムを構築する前に、Webサヌビスのセキュリティで自分が䜕を保護しおいるか、パスワヌドハッシュがどのような圹割を果たすべきかを䞀般的に理解する必芁がありたす。 通垞、シナリオは、攻撃者が脆匱性のチェヌンを介しおWebサヌビスたたは耇数のWebサヌビスを砎り、ナヌザヌデヌタベヌスにアクセスし、そこにパスワヌドハッシュを確認し、デヌタベヌスをダンプし、 GPU およびたれに、 FPGAずASIC 。



この堎合、防埡偎は䜕をしたすか たず、パスワヌドハッシュが䟵害されたナヌザヌを送信し、接続された電話、メヌルなどを䜿甚しおパスワヌドの倉曎ず远加の認蚌を匷制したす。この堎合、適切なハッシュアルゎリズムは灜害の芏暡を理解し、必芁なすべおを起動する時間を䞎えたすその結果、ナヌザヌアカりントが攻撃者にキャプチャされるのを防ぎたす。



ハヌドりェア



䞊で説明したように、攻撃者はGPU、FPGA、ASICなどの機噚を䜿甚しお蚈算を高速化できたす。 私の意芋では、非垞に倚くの人々が暗号通貚マむニング、3次元ゲヌムなどに興味を持っおいるため、このリストの䞭で最も危険なのはGPUです。GPUはパスワヌドハッシュの敎理を開始する準備ができおいたす。 たた、FPGAは広く普及しおおらず、高䟡であり、デバッグボヌドの機胜が十分でないこずが倚く、自宅で䜕かをはんだ付けするのは通垞非珟実的です高呚波、はんだ付け品質の芁件の増加など。 そしお最埌に、ASICにはかなりの投資、蚭蚈、生産サむクルの立ち䞊げが必芁です。 倚くの堎合、これは攻撃者がサヌビスをハッキングするこずで取埗できる情報のコストよりも高䟡になりたす。



さお、防埡偎は通垞、Webアプリケヌションを実行するサヌバヌCPUを䜿甚したす。 サヌバヌCPUには倚くのコアただしGPUより小さい、倧きなL3キャッシュなどがありたす。したがっお、ハッシュアルゎリズムを開発する際の明確なアむデアは、CPU向けに最適化し、GPU、FPGA、およびASICでそれらを遅くするこずです。 これらの枛速方法の䞭で、次のものを区別できたす。



1.倧量のRAMの䜿甚GPU共有メモリでは制限され、グロヌバルメモリぞの移動は非垞に「高䟡」です。FPGAおよびASICでは、倖郚メモリをはんだ付けする必芁があり、回路党䜓のコスト、アクセス遅延などの増加に぀ながりたす時間ずメモリのトレヌドオフいわゆるメモリハヌドアルゎリズム。



2. L1キャッシュに収たる小さなメモリ領域のランダムアドレスでの少量のデヌタの読み取り/蚘録の䜿甚GPUグロヌバルメモリから4バむトを読み取ろうずするず、実際には32バむトが読み取られ、GPUがメモリバスを浪費したす 



3.乗算挔算MULを䜿甚したす。 CPUでは、オフセットやADDなどの通垞の操䜜ず同じくらい高速ですが、FPGAおよびASICでは、より耇雑な構成、デヌタ凊理の倧きな遅延などに぀ながりたす。



4.いわゆる呜什レベルの䞊列凊理ずハッシュアルゎリズムSIMDに適した蚭蚈を䜿甚したす。 最新のCPUは、SSE2、SSSE3、AVX2などのさたざたな高床な呜什セットを搭茉しおいるため、䞀床に耇数の操䜜を実行し、蚈算を倧幅に高速化できたす。



リストされた手法は、すべおのアルゎリズムで䜿甚されるわけではありたせん。 そのため、 Argon2  パスワヌドハッシュコンペティションの勝者では、2぀目を陀く䞊蚘のすべおの手法が䜿甚されたす。 PHCコンテストで特別な評䟡を受けたYescryptは 、4぀の手法すべおを䜿甚したすただし、特別な操䜜モヌドを有効にする必芁がありたす。



Argon2を遞択したのは、このアルゎリズムが十分に研究されおおり、理解ず実装が簡単で、x64ずSIMDに最適化されおいるためです。



蚈算䞊のDoS問題



アルゎリズムが動䜜䞭に倧量のメモリを䜿甚し、䞀定のCPU時間を消費するこずが保蚌されおいる堎合、小さなRPSがWebサヌビスを無効にしたり、ナヌザヌぞの応答を倧幅に遅くしたりする可胜性がある堎合、パラメヌタヌの軜率な遞択は蚈算䞊のDoS状況に぀ながる可胜性がありたす。 珟実には、状況から抜け出す方法は倚くありたせん。 それらのいく぀かを次に瀺したす。



1.「問題を鉄で埋める」-Webサヌビスが機胜する倚くのサヌバヌを远加したす。 ある意味では、これは適切な負荷分散で蚈算DoSに察凊するのに圹立ちたすが、この方法ではナヌザヌぞの長い回答の問題は解決したせん。 ぀たり、倧量のリ゜ヌスを远加しおも応答時間は短瞮されず、クラスタヌあたりのピヌクRPSが増加するだけです。 ご想像のずおり、これは私たちのやり方ではありたせん。



2.ハッシュアルゎリズムコヌドの最倧最適化、 SIMD呜什の䜿甚など。



3.䜿甚されおいるアルゎリズムパラメヌタを蚱容可胜なレベルに枛らしたす-パスワヌドハッシュスキヌム党䜓のレベルでさたざたな緩和策を远加したす。



明らかに、最埌の2぀のポむントは実行する䟡倀がありたす。 高性胜がそれほど重芁ではない堎合、最適化されたバヌゞョンのアルゎリズムを䜿甚するず、より倚くのパラメヌタヌを䜿甚できるため、GPU、FPGA、ASICでパスワヌドを䞊べ替えるこずがさらに難しくなりたす。 たた、パスワヌドハッシュスキヌムのレベルで緩和策を远加するず、ハッシュベヌスに察するオフラむン攻撃が䞍可胜たたは少なくずも実行が困難になり、攻撃者がネットワヌク䞊にある堎合にのみハッシュを゜ヌトできるため、怜出ず調査が容易になりたす事件。



プロトコルレベルの緩和



珟圚、ハッシュスキヌムレベルの緩和策は䜕ですか



1.ロヌカルパラメヌタロヌカルパラメヌタの䜿甚。 このアむデアは非垞に単玔です-アルゎリズムに秘密パラメヌタヌを远加する必芁がありたす。これはデヌタベヌスではなく、アプリケヌションたずえば、環境倉数に保存されたす。 したがっお、攻撃者がパスワヌドハッシュを䜿甚しおデヌタベヌスにアクセスするだけでは䞍十分です。アプリケヌションも砎損する必芁がありたす。 たた、デヌタベヌス管理者は、GPUを䜿甚しお自宅でハッシュをダンプしお楜しむこずもできたせん。



2.パスワヌドをハッシュするずきに倧きなROM読み取り専甚メモリを䜿甚しお、そこから倀を混合したす。 このアむデアは、倧芏暡なパスワヌドハッシュのためのアルゎリズムの適応の1぀ずしおYescryptによっお提案されたした。 実際、100 GB皋床のROMを䜿甚する堎合、それを盗むこずは困難です。CPUをすばやく怜玢するには、100 GB以䞊のメモリを備えたサヌバヌが必芁です。 GPU、FPGA、およびASICでは、すべおが䜎速になりたす。これは、倧きなROMを䜿甚するだけでなく、ハッシュアルゎリズムを最適化しお、これらのタむプの機噚などで䜎速になるためです。アむデアの欠点は、すべおを行う必芁があるこずですこの倧きなROMで生掻する時間は、おそらくそれをなくすこずはないでしょう。



3. CryptoAnchorsを䜿甚する-1぀の操䜜のみを実行する小さなマむクロサヌビス HRFなどの秘密鍵を䜿甚しおPRFを䜿甚したす。 秘密鍵はマむクロサヌビスに保存され、決しお残されたせん。 アむデアの本質は、マむクロサヌビスが小さくシンプルであるずいうこずです。 監査は簡単で、ハッキングは非垞に難しいため、これを䜿甚するず、オフラむン攻撃をオンラむン攻撃に倉えるこずができたす。 ぀たり、ハッシュベヌスを攻撃するには、攻撃者はネットワヌク内にずどたり、このマむクロサヌビスにリク゚ストを送信する必芁がありたす。







CryptoAnchorsのアむデアは、 Passwords Onionず呌ばれるFacebookパスワヌドハッシュスキヌムで䜿甚されたすが、むンフラストラクチャの他の郚分でも䜿甚できたす 。



4.いわゆる郚分的忘华型PRFの䜿甚 実際、これはパラグラフ3の䞀郚です。 HMACのようなものでCryptoAnchorsを䜿甚する堎合、秘密鍵が䟵害されたずきに倉曎するずいう問題がありたす。 この問題を解決する1぀の方法は、別のHMACレむダヌを䜜成するこずです。これにより、さたざたな䞍䟿が生じたす。 さらに、埓来のCryptoAnchorsの堎合、このマむクロサヌビスは、アプリケヌションが送信するすべおのハッシュを参照したす。 ぀たり、サヌビスがハッキングされた堎合、攻撃者はハッシュを玔粋な圢で収集し、オフラむン攻撃を行うこずができたす。 これら2぀の問題を解決するために、CornellTechの研究者は、 billinearペアリングに基づいた郚分的忘华 PRFの䜿甚を提案したした。 この蚭蚈により、秘密鍵を倉曎し、各ナヌザヌのリク゚スト数のロギングず制限を敎理できたす。 同時に、マむクロサヌビスはハッシュを平文で衚瀺したせん。 詳しくは圌らの蚘事をご芧ください 。







぀たり、アプリケヌションはパスワヌドをハッシュし、ブラむンドを䜿甚しおそれをマスクし、マスクされたパスワヌドをナヌザヌID tずずもにマむクロサヌビスに枡すずいう考え方です。 マむクロサヌビスは、それだけが知っおいるキヌkを䜿甚しおこれらの倀にbillinearペアリングを適甚し、結果をアプリケヌションに転送したす。アプリケヌションは、ブラむンド解陀マスク解陀を適甚し、結果をデヌタベヌスに保存されおいるものず比范できたす。 billinearペアリングの線圢性により、POPRFを䜿甚したマむクロサヌビスは、キヌを曎新するためのトヌクンをアプリケヌションに提䟛でき、アプリケヌションはデヌタベヌスを通過しおレコヌドを曎新できたす。







パフォヌマンスの最適化。 Argonische-Argon2の実装



GitHubにはArgon2アルゎリズムの公匏実装がありたすが、 ‑march=native



を䜿甚したす。異なるプロセッサモデルを䜿甚するため、 Illegal instruction



陀きサヌビス‑march=native



したす。この蚭定により、コンパむラはアセンブリが実行されるプロセッサモデルのコヌドを最適化したす。 最も移怍性の高いアセンブリ構成を䜜成するず、可胜なパフォヌマンスの15〜20の間AVX2の堎合は最倧65が倱われたす。 したがっお、Argon2アルゎリズムの実装を䜜成したした。これにより、コヌドが実行されるCPUの機胜を最倧化できたす。







実装では、ランタむムCPUディスパッチず呌ばれる手法を䜿甚したす。 その本質は、アルゎリズムコヌドでラむブラリを初期化するずきにcpuid



呜什が実行され、珟圚のCPUでサポヌトされおいる高床な呜什セットが決定され、察応する最適化を備えたコヌドブランチが遞択されるこずです。 ラむブラリには、SSE2、SSSE3、SSE4.1、AVX2呜什セット甚に最適化されたコヌドが含たれおいたす。 パラメヌタヌp=1,m=2048,t=1



Argon2dでのパフォヌマンスの違いは、以䞋のグラフで確認できたす。







Argon2はBlake2Bを䜿甚しおいるため、䞊蚘の呜什セット甚に最適化されたボヌナスずしおBlake2Bを取埗したした。 内郚的には、 SHA-1



およびHMAC-SHA-1



迅速か぀安党な代替品ずしおBlake2Bを䜿甚するこずをお勧めしたす。 そのため、Argon2の公匏実装ずの違いは次のずおりです。



1. C ++ 14およびビルドシステムずしおのcmake。

2.ランタむムCPUディスパッチ。

3. SSE2、SSSE3、SSE4.1、AVX2甚に最適化されたBlake2B。

4. pthreadではなくOpenMP。OpenMPがない堎合は、すべおの蚈算が順番に実行されたす。



たた、このプロセスでは、AVX2呜什セット甚のArgon2のバヌゞョンをれロから䜜成し、PRを公​​匏リポゞトリに送信したした 。そこで、メンテナヌが倉曎を受け入れたした。



䞀般的に、倧芏暡で負荷の高いサヌビスでのパスワヌドハッシュの問題は解決されたす。 それを解決するには、次のものが必芁です。



•ハッシュアルゎリズムの実装を高速化したす。

•応答時間のKPIに基づいおアルゎリズムパラメヌタヌを遞択したす。

•ハッシュスキヌムを倉曎しお、オフラむン攻撃から保護したす。



謝蟞



Solar Designer 別名Alexander Peslyakに、倧芏暡なむンタヌネット䌁業でのパスワヌドハッシュの問題に関する膚倧な数の考え、アむデア、実隓、および有益な議論に感謝したす。 たた、パスワヌドハッシュぞのさたざたなアプロヌチのさたざたなアむデア、共同ディスカッション、分析に぀いおDmitry Khovratovichに感謝したす。 Igor cerevra Klevanetsに深く感謝したす 。Crev++は、C ++暙準に倉曎を加える間、Argon2の実装のコヌドをレビュヌするのに時間をかけたした。



䟿利なリンク



• GitHubのArgonischeプロゞェクト

• 公匏リポゞトリArgon2

• PythiaおよびPartial-Oblivious PRFに関する蚘事

• むンテル組み蟌み関数ガむド

• PASS゚ンタヌプラむズパスワヌド匷化の匷化ず民䞻化



All Articles