暗号化ず暗号化入門、パヌト2。 Yandexでの講矩

Vladimir ivlad Ivanovの暗号理論の最も短い玹介に戻りたす。 これは講矩の埌半です。数日前に公開した最初の郚分です。 圌女にgithubでプルク゚ストを送信するこずもできたす 。


カットの䞋-デコヌドずスラむドの䞀郚。



-実際の状況は次のずおりです。256ビット長の乱数の2぀のサンプル間の衝突は、玄40億のサンプルでœの確率に達したす。 したがっお、64ビットのランダムビットの長さを持぀ブロックのストリヌムを考えるず、2 32個のそのようなブロックの䞭で確率がœの堎合、2぀の同䞀のブロックがありたす。

瀺された科孊的事実にはどのような応甚䟡倀がありたすか 暗号化関数の出力は乱数ず芋なすこずができ、理想的な暗号化関数は乱数ず区別できたせん。 したがっお、たずえばDESアルゎリズムたたはGOST-28147で暗号化されたブロックを考慮し、これらのブロックのうち2 32個を䜿甚するず、2぀のブロックが同じように暗号化される確率がœになりたす。

誰かに数えおみたしょう64ビットたたは8バむトの2 32ブロック-䜕個 32ギガバむト 真実のように聞こえたす。 次に、32ギガバむトを10ギガバむトに分割したす。 64ビットブロックの暗号化アルゎリズムを䜿甚しおいる堎合、少し遅れお32秒埌に衝突が発生したす。 同じように暗号化された2぀のブロックが衚瀺されたす。 SHSで芋られるように、これらの2぀のブロックは同じ平文である必芁はありたせん。 クリアテキストは異なる堎合がありたす。

それはどういう意味ですか ブロックC iがある堎合、SHSモヌドで暗号化されたものは䜕ですか

30秒埌に衝突が芳枬されたずしたす。 2぀の郚分は等しいです。 暗号化は1察1の察応です。 したがっお、暗号化関数は等しいため、暗号化も等しくなりたす。

C j-1ずC i-1-通信チャネルで送信されたばかりであるため、それらを芋たした。

蚀い換えれば、ブロックサむズが非垞に小さい堎合、完党に匷力な暗号化を䜿甚しおいおも、しばらくするず、2぀のランダムなプレヌンテキストの違いを受け取り始めたす。 このプロパティは必ずしも実際の攻撃に倉換されるわけではありたせんが、実際にはあたり良くありたせん。 そのため、SHS䜓制は倚くのトラブルの原因です。

これらのトラブルの最埌は、ほんの数週間前に公開された攻撃聞き取れない-玄線です。 極端ですが、このシリヌズの最埌ではないず思いたす。 すべおは、私が話したSHSの䞍幞な性質のためです。

ただし、SHSは䟝然ずしお広く普及しおいる暗号化モヌドです。 どこでも圌に䌚えたす。

-最埌の10ビットを取埗する必芁がある堎合、順番にカりントする必芁がありたす...

-はい、もちろん、SHSには問題がありたす。1ギガバむトを埩号化しおその䞭の最埌の10バむトを読み取るには、最初にすべおを生成する必芁がありたす。

SHSのすべおの難しさにもかかわらず、それは䟝然ずしお最も䞀般的な暗号化モヌドです。確かにTLSですが、IPsecで、぀たり、実際に䜿甚されるプロトコルであるず思いたす。

実生掻でこれに察凊するには たず、Triple DESはもはや広く䜿甚されおいたせん。 さらに、128ビットのブロックサむズのAESを芋るず、玄2 64ブロック埌に衝突確率œが発生し、これは倧量のトラフィックです。 したがっお、実際の生掻では、衝突時に぀たずく可胜性は高くありたせん。 政府機関ではなく、䜿甚を匷制されおいない堎合は、Triple DESずGOST-28147を䜿甚しないでください。

暗号化モヌドはSHSだけではありたせん。 ただCFBがありたす。 泚意深く芋れば、圌はSHSず倧差ありたせん。 初期化ベクトルを取埗し、それずプレヌンテキストをXORし、暗号文を取埗したす。 結果はもう䞀床暗号化され、Xorimはプレヌンテキストで、テキストの2番目のブロックなどを取埗したす。

CFBに぀いお話したのはなぜですか SHSずは異なり、CFBバリアントは州の暙準仕様向けに暙準化されおいるためです。 よく芋るず、この意味ではSHSに勝るものはありたせん。同じ問題がありたす。 クロヌズドシステムでは、瀺された実装に遭遇する可胜性がありたす;原則ずしお、いく぀かの問題が発生したす。

これらのアルゎリズムには他にどのような問題がありたすか 埌続の各ブロックを埩号化するには、暗号化されたプレヌンテキストが必芁です。 利甚可胜なプレヌンテキストブロックがないず、次の暗号化ブロックを生成できたせん。 この問題を取り陀くために、次のように機胜するOFBモヌドを考え出したした初期化されたベクトルが䞎えられ、キヌで暗号化され、結果は再びキヌで暗号化されたす...実際、初期化ベクトルを䜕床も取埗し、必芁な数のブロックを暗号化したす。

ブロックをクリアテキストで远加したす。 なぜこれが䟿利なのですか よく芋るず、暗号化のブロックモヌドはストリヌミングに倉わりたす。 珟圚トラフィックがほずんどなく、プロセッサが空いおいる堎合、事前にいく぀かのブロックを生成し、トラフィックが急増する可胜性がある堎合はそれらを䜿甚できたす。 ずおも快適です。 そしお、次のブロックを暗号化するのに平文の知識は必芁ありたせん。 必芁に応じお、数ギガバむトのメモリを入力しお保持できたす。

ストリヌム暗号のすべおの欠点もここにありたす。

わずかに異なる暗号化方匏は、いわゆるカりンタヌモヌドたたはCTRです。 構造は単玔です。特定の乱数を取埗しおブロックの先頭に配眮し、最埌にカりンタヌを0から必芁な数だけ配眮したす。 たずえば、最倧64ビット。 半分に分割したす。巊の64ビットは乱数に、右の64ビットはカりンタヌに䜿甚されたす。

このような各番号を暗号化し、結果をクリアテキストで削枛したす。

CTRが䟿利な理由 これにより、前の124ブロックを暗号化せずに125番目のブロックを暗号化できたす。぀たり、10ギガバむトのファむルから最埌の16バむトを埩号化する問題を解決したす。 他のすべおの意味で非垞に䟿利です。 トラフィックの急増に぀いお話す堎合、暗号化のためのブロックを事前に生成できたす。

これは、1ブロックよりも長いメッセヌゞの堎合です。 しかし、それらが1ブロックより短い堎合はどうでしょうか ぀たり、16バむトではなく8バむトを暗号化したす。

-16たで終了したす。

-そしお、どうやっお 末尟に4぀のれロがあるブロックを解読したず仮定したす。 これらの4぀のれロがブロックされおおり、ブロックの断片ではないこずをどのようにしお知るこずができたすか

-暗号化されたメッセヌゞを送信する前に、長さをバむト単䜍で通知したす。

-䟿利な方法ですが、転送前にサむズを垞に把握しおいるずは限らないずいう点で䞍䟿です。 メヌルの堎合-ご存知ですが、そうでない堎合は

転送埌 さお、おそらくあなたはできたす。 そしお、違いを探す堎所はどこにありたすか 別の堎所で保管する必芁がありたす。 問題はどれですか

-暗号化のフレヌムワヌク内ではありたせん。

-暗号化の䞀郚ずしおメッセヌゞの長さを送信しない堎合、それを開瀺したす。 私たちは圌女を隠したず思いたす。

私の地獄、぀たりパディングのあるシステムぞようこそ。 メッセヌゞの最埌にどれだけの長さを曞く必芁があるかずいう考えは、それほど悪くはありたせん。 ブロックを補完する方法を考え出すこずだけが重芁です。これにより、デヌタの䞀郚ではなく、最埌の郚分が远加であるこずを明確に確認できたす。

パディングにはいく぀かのモヌドがありたすが、残念ながら、最も䞀般的なものにはいく぀かの䞍快な特性がありたす。

最埌のブロックの最埌に、各空きバむトに空きバむト数を远加したす。 最埌に3バむトがある堎合、それらを取埗しお曞き蟌みたす3、3、3。

メッセヌゞの長さが境界線䞊に正確に収たる堎合、別のブロックを远加したす。私の意芋では、4぀のれロを曞き蟌みたす。 基本的にではありたせん。 このコヌディング方法は垞に䞀意です。 開いお最埌のバむトを認識し、れロでない堎合、いく぀かのバむトをカりントする必芁があるこずを理解したす。 実際、これは巧劙にコヌディングされたメッセヌゞ長です。 最埌のバむトがれロの堎合、ブロック党䜓を砎棄できたす。 そしお、完党なブロックがれロで終わるこずは決しおないこずを知っおいたすそれから、別の完党にれロのブロックでそれを補いたす。

最埌のブロックがナニットで終了する堎合、それは完党であり、別のブロックで確実に補完したす。

それは正垞に芋えるでしょう。 私たちの前にパディングの動䜜メカニズムがありたす。

攻撃を実行したずしたしょう。 Oracleシステムがありたす。これは暗号化ず呌ばれおいたす。 これは、デヌタベヌスを䜜成するOracleの皮類ではありたせん。 これはデバむスがわからないボックスですが、この堎合は暗号化たたは埩号化アルゎリズムです。 どのキヌが内郚にあるかはわかりたせんが、䜕らかの答えが埗られたす。 ただし、挿入した行が正しくデコヌドされたのか、誀っおデコヌドされたのかに぀いお、圌は確かに答えをくれたせん。

だから、ボックスが瀺されおいたす。 同時に、1぀のメッセヌゞが衚瀺され、そのメッセヌゞが正垞に解読されたこずを確認できたす。 奇劙なこずに、実際のシステムでは、このようなメッセヌゞは簡単に受信できたす。

次に、メッセヌゞを受け取っおボックスに送信し、最埌の1バむトを倉曎したす。 ボックスは2぀の状態を返すこずができたす。 蚭蚈が䜕らかの圢でうたく埩号化されたこず、たたはパディング゚ラヌのために埩号化されなかったこずを孊習したす。

どのように機胜したすか プログラムコヌドは䜕かを解読しようずし、それを解読し、最埌にパディングをチェックしたす。 パディングが暙準を満たしおいない堎合は、「333」たたは䜕かが間違っおいたす。最埌のブロック党䜓がれロではなく、「パディング゚ラヌ」ず衚瀺されたす。 このようなスキヌムにより、最埌のブロックの最埌のバむトを非垞に簡単に゜ヌトできたす。 たずえば、SHSの䞍運なモヌドを䜿甚する堎合、プレヌンテキストを調べお、ここに䜕があるかを理解できたす。

すべおがかなり無害に芋えたす。 しかし実際には、パディングオラクル攻撃の問題により、たずえば2008幎頃のWindows 2003での悪意のあるコヌドのリモヌト実行が発生したした。

なぜこれが起こっおいるのですか 䜕かを期埅しおいるメッセヌゞが実際にメッセヌゞを送信したこずを確認せずに、䜕かを解読しようずしおいたす。

認蚌ぞようこそ。 先ほどお話しした内容はすべお、メッセヌゞの機密性を保蚌したした。 暗号化を䜿甚しお、メッセヌゞを送信し、受信者以倖の誰もそれを読み取らないようにしたす。 しかし、受信者がメッセヌゞを受信したずきに、メッセヌゞが実際に送信者から来たこずをどのように確認できたすか この怜蚌のために、メッセヌゞ認蚌プロトコルの別個のセットがありたす。 英語では、これはMAC-メッセヌゞ認蚌コヌドず呌ばれたす。

問題は䜕ですか ストリヌム暗号化アルゎリズムに問題がありたす。 䜕も知らないメッセヌゞがあるずしたす。 䜕らかの方法で生成されるガンマがありたす。 暗号文が刀明したした。 暗号が完党に匷力であり、すべおがうたくいっおいるずしたす。 しかし、攻撃者が受け取ったメッセヌゞの䞀郚を取り蟌んで倉曎したずしたす。 間違いを芋぀けたすか 明らかにそうではありたせん。

圌がれロビットを1に倉曎した堎合、圌は予想倖に平文を倉曎したした。 暗号文でナニットをれロに倉曎し、元のメッセヌゞでこの堎所にもれロがあった堎合、それは1に倉曎されたす。 暗号文を少し「反転」するず、平文も反転したす。 たた、この問題は単䞀の暗号化アルゎリズムでは怜出できたせん。

ブロック暗号にはさらに問題があり、それらが蓄積し、おそらくパディングの問題に遭遇するこずは明らかですが、䞀般にこの問題は䟝然ずしお存圚したす。 暗号化だけではメッセヌゞ認蚌は提䟛されたせん。 別のメカニズムが必芁です。

このメカニズムはMASず呌ばれたす。 圌はどのように働いおいたすか

メッセヌゞを受け取り、MACアルゎリズムず呌ばれる特別な機胜を通過させたす。 入力では、MACアルゎリズムはメッセヌゞだけでなく、暗号化キヌずは異なるキヌも受信したす。

メッセヌゞを䌝えたいずきは、アルゎリズムの結果をそれに添付したす。 受信者はメッセヌゞを受け取り、同じ操䜜を実行しお、蚈算したMACず受信したMACを比范したす。 それらが䞀臎する堎合、プロセスでメッセヌゞが倉曎されなかったこずを意味したす。 2぀のMASが䞀臎しなかった堎合、途䞭で問題が発生したした。

MAC関数ずしお䜿甚できるものは䜕ですか ナニットの数を䜿甚できたすが、そのようなスキヌムは簡単に停造されるようです。

ハッシュ関数は明らかな答えです。 そしおたた

長い間、SHS MASが配垃されおいたした。 初期化ベクトルがなく、他のすべおが同じである構造を取りたす。 暗号化テキスト、暗号化、「チェヌン」、暗号化、「チェヌン」を取埗したす。最埌のブロックが取埗され、テキストに関するすべおの情報が蓄積されたす。 ずおも快適です。

しかし、MACの芁玠ずしお䜕らかの暗号化ハッシュを䜿甚できるこずも事実です。 いく぀かの暗号化ハッシュがありたすが、その䞭で最も䞀般的なものはMD5、SHAファミリ、GOST 34.11です...最近、SHA-3の競合が集たり、Keccakアルゎリズムが勝利したした。

ハッシュは暗号化アルゎリズムよりも耇雑ですが、原則ずしお、ハッシュ関数を構築するずいう考え方はブロック暗号化アルゎリズムに䌌おいたす。 ぀たり、いく぀かのデヌタブロックを取埗し、連続しお、かなり基本的な操䜜のセットを数回適甚したす。 MD5を芋るず、モゞュロ2ず巡回シフトだけが加算されおいたす。 原則ずしお、ブロック暗号化アルゎリズムの堎合よりもはるかに倚く適甚したす。 途䞭で1ブロックよりも長い関数を取埗する必芁があるテキストがある堎合は、SHSに少し䌌た方法を䜿甚しおそれらを線集したす。 これらのフラグメントを蚈算関数に远加したす。

ハッシュの蚈算結果は数倀です。 数倀の長さは垞に固定されおいたす。 MD5の䞀般的なハッシュ出力サむズは、128ビット、SHA-1-168ビット、SHA-256-256ビット、SHA-384-384ビット、SHA-512-512ビットです。

ハッシュに぀いお他に䜕が蚀えたすか 入力に小さな倉曎がある堎合、ハッシュは出力に倧きな倉曎を提䟛する必芁がありたす。 したがっお、入力で平文の1ビットを倉曎した堎合、理想的にはハッシュハッシュ関数の蚈算結果が正確に半分に倉曎されるはずです。

珟圚、実際には、SHA-2、具䜓的にはSHA-256たたはSHA-384を䜿甚するこずをお勧めしたすニヌズに応じお。 MD4は長い間壊れおいたした。MD5-原則ずしおも壊れおいたす。昚日、MD5に察する新しい攻撃が公開されたした。 MD5の䜿甚はもはや必芁ないず想定できたす。 実際には、垞にSHA-2を䜿甚しおください。

認蚌に加えお、ハッシュ関数が䜿甚される他の堎所はどこですか PBKDF2などの鍵生成プロトコル。 ファむルを暗号化する必芁があるずしたす。 ナヌザヌを取埗し、原則ずしお、ファむルの暗号化に必芁なパスワヌドを芁求したす。 実際の状況では、ナヌザヌは1〜5のシヌケンスのようなものをパスワヌドずしお入力し、䜜業が完了したす。

䞀方では、暗号化キヌを「12345」ほど予枬可胜ではなく、ビット分垃をより均䞀にする必芁がありたす。 䞀方、攻撃者がすべおの可胜なパスワヌドオプションを敎理し始めた堎合、各ブルヌトフォヌス攻撃は可胜な限り倚くの時間を芁するはずです。 瀺されたKDF関数のクラスは、これを正確に目指しおいたす。

PBKDF2は、キヌ生成関数クラスの特定の関数です。 ずおもシンプルに配眮されおいたす。 圌女は䜕䞇回もハッシュアルゎリズムを䜿甚しおいるだけです。 そしお、偶然-各段階で、远加のデヌタを混合するため、事前に蚈算するのはかなり困難でした。

ハッシュ関数はかなり長い間実行されおいるため、ハッシュ関数の実行には数千回も時間がかかりたす。 ぀たり、䞀般的なパスワヌドをいく぀か詊そうずする攻撃者から䟿利に保護されおいたす。

実際には、KDF関数を䜿甚する堎合は、反埩の数を遞択するこずをお勧めしたす。これにより、䞀方ではせっかちなナヌザヌには受け入れられ、他方では数癟䞇のキヌを取埗したい攻撃者には受け入れられたせん。 実際には、KDFで非垞に倚くの反埩を遞択しお、たずえば1秒間実行したす。 攻撃者にずっお、1秒は絶察にわいせ぀な時間ですが、ナヌザヌはボタンを抌しおパスワヌドの確認を埅぀こずで、1秒埅぀こずができたす。

パスワヌドの保存は、ハッシュの䜿甚ず同じです。 UNIXの話のアントンは確かにこれに぀いお語っおいたす。

オラクルのパディング攻撃ず同様の攻撃があるため、メッセヌゞを生成するずき、2぀のオプションがありたす。

MACのような暗号プリミティブがあり、暗号化のための暗号プリミティブがありたす。 メッセヌゞを送信しお認蚌する必芁がありたす。 2぀の方法がありたす。 メッセヌゞを暗号化しおから、このモノからMACを取埗しおメッセヌゞに添付できたす。 完党に次のようになりたすET|| MACET。

2番目の方法は次のずおりです。メッセヌゞを取埗し、暗号化しお、クリアテキストからMACを取埗したす。 なぜ远加の操䜜が必芁なのですか

実際、1぀は暗号化前のMACず呌ばれ、2぀目はMAC前の暗号化です。

質問-どちらが良いですか 同じですか OK、他のバヌゞョンですか

別の玠晎らしい方法がありたす-圌らは蚀う、平文に぀いおの知識が流出しないようにMACを暗号化したしょう。

実際、この方法には問題がありたす。それを䜿甚しおメッセヌゞを暗号化するず、パディングオラクル攻撃にさらされるリスクが発生したす。 パディングオラクルは、MACが最埌にあるか他のデヌタがあるかを心配したせん。 最初にメッセヌゞの埩号化を詊みるボックスがありたす。 パディングが正しくないために埩号化されない堎合、MACボックスでもチェックされたせんが、攻撃者たたは「このものを埩号化できたせんでした」ずすぐに応答したす。 䞍快なほどです。 したがっお、このようなシステムの蚭蚈に関する䞀般的な掚奚事項を次に瀺したす。自分が䜕をしおいるのかわからない堎合は、そのようなものを䜿甚するこずをお勧めしたす。知っおいる堎合は、これET|| MACET。

わずか6か月前、アントンず私は1぀の堎所に぀いお話し合い、2番目のデザむンの䜿甚を䞻匵したした。 自分が䜕をしおいるのか知っおいるず思った。 そしお、ただパディングオラクルがなかったので、私は自分が䜕をしおいたかを知っおいたようです。

メッセヌゞを暗号化し、受信したメッセヌゞが実際に送信者から来たこずを確認できたす。 : A B , .

, , , , , . - KDF- : , . .

? — . — . — . 100 , . , 100 , — .

, , , .

— .

?

k 1 k 2 , . k 1 , k 2 . , .

: k 1 k 2 , , , . , .

, , . , , - .

, , , , P = NP. . RSA, , . .

, , . - (DH). , , .

. P G. .

a . .

- , B . G P . , G P . .

? . , , , b. : a = A b . .

, , , . .

, , , , — 0.

, , — RSA.

. — 1024 . 2048, 4096 8192: , .

— .

(n-1)(p-1). — , .

, : , . - . .

— . , .

, d — . . , , . RSA.

, , . , k, , k — .


, - , - , n. . , , .

-, d.

de = 1 n, , M ed mod n, , M 1 n. . M 1 = M.

RSA, ? , k 1 k 2 , , — . — , d — . , , , , , . : M e , d, M d , .

RSA, ?

, - . XOR , . , , . . — , , .

. , , . RSA , — . . : - , - , , -.

RSA 1024, 2048, 4096 — . AES, DES Salsa : 256, 128 64 DES.

, — RSA-2048 AES-256? RSA , , AES 2 256 , RSA — . , . 2 2048 .

, , - - . , . , , . , .

- , . , 2014 AES 78-80 . , RSA, 1300-1400 . keylength.com , . — 160-170 . SHA1 2014 , — 168 .

- , , .

. , , , .

. : . : . , .

. , email. , ?

— , 128 . ? , . .

, .

, , , .

.

. . , , - . , .

.

128- , . 128- , , . , . . .

? , . , . , , 
 - ?

, . . ?

, , 
 , . padding oracle, , , .

? , , , . , . , , — , .

, , . : , , . -, — . -, , .

? , , .

. , , S/MIME PGP. , , , .

, . , . , , . , . ? ?

: , DH , , . .

, DH, , , .

DH (. man-in-the-middle MITM — . .). , , , . , , - , , , , - . DH- — . , , .

どうする , .

— , — 


— ? ?

— 


-なんで .

— , .

— . , ?

— 
 .

— ? , DH : , , .

— DH- MITM?

-いいえ。 , DH-? , DH- . MITM , ? 信じられたせん

, ? . , A . それだけです .

? , . , . — , -, , , -, , .

: , , , . . DH.

, . , -. , , .

, . . - DH-, , ?

? , . . ? . - ? , . .

, - . . . : , , , , — . あたり䟿利ではありたせん。 , , MD5 SHA, . , - . HMAC. , .

, , . , , . C 1 . , C 2 , , .

. , . DH, DH . , - KDF-, : . , . — : , . — KDF-.

, , , , .

, , . , . , . HTTPS , , .

. . , . . , . , . — .

, ?

Source: https://habr.com/ru/post/J327636/


All Articles