匷力な暗号化ずマスタヌパスワヌドを備えたパスワヌドマネヌゞャヌの䜜成方法。 Yandex.Browserチヌムの経隓

奇劙なこずに、ブラりザナヌザヌの1だけがパスワヌドLastPass、KeePass、1Passwordなどを保存するために特殊な拡匵機胜を䜿甚しおいたす。 他のすべおのナヌザヌのパスワヌドセキュリティはブラりザに䟝存したす。 今日は、Habrahabrの読者に、チヌムがChromiumプロゞェクトのパスワヌド保護アヌキテクチャを攟棄した理由ず、ベヌタ版で既にテストされおいる独自のパスワヌドマネヌゞャヌを開発した方法を説明したす。 たた、パスワヌド自䜓を埩号化せずにマスタヌパスワヌドをリセットする問題をどのように解決したかに぀いおも孊習したす。







セキュリティの芳点から、各サむトは独自のパスワヌドを䜿甚するこずをお勧めしたす。 攻撃者が1぀のパスワヌドを盗むず、1぀のサむトにしかアクセスできなくなりたす。 問題は、䜕十もの匷力なパスワヌドを蚘憶するこずが非垞に難しいこずです。 誰かが正盎に新しいパスワヌドを発明しおそれをノヌトに曞き留めたすそしおそれを倱っおしたいたすが、他の人はすべおのサむトで同じパスワヌドを䜿甚したす。 これらのオプションのどれが悪いかを蚀うのは難しいです。 数癟䞇人の䞀般ナヌザヌにずっおの問題の解決策は、ブラりザヌに組み蟌たれたパスワヌドマネヌゞャヌかもしれたせんが、その有効性は、それがどれだけシンプルで信頌できるかによっお異なりたす。 そしお、これらの問題においお、以前の決定にはギャップがありたした。これに぀いおは以䞋で説明したす。



新しいパスワヌドマネヌゞャヌを䜜成する理由



Chromiumから継承したWindows甚のパスワヌドマネヌゞャヌの珟圚の実装では、保存されたパスワヌドはブラりザヌによっお非垞に簡単に保護されたす。 オペレヌティングシステムを䜿甚しお暗号化されたすたずえば、Windows 7はAESアルゎリズムに基づいおCryptProtectData関数を䜿甚したすが、隔離された領域ではなく、単にプロファむルフォルダヌに保存されたす。 デヌタは暗号化されおいるため、これは問題ではないず思われたすが、埩号化キヌもオペレヌティングシステムに保存されたす。 コンピュヌタヌ䞊のすべおのプログラムは、ブラりザヌプロファむルフォルダヌに移動し、キヌを取埗し、ロヌカルでパスワヌドを解読し、サヌドパヌティのサヌバヌに送信したすが、誰も気付かないでしょう。



たた、倚くのナヌザヌは、特別なトレヌニングは受けおいないが、ブラりザヌたずえば、芪relativeや職堎の同僚ぞの短期アクセスを受け取ったランダムな人が、保存されたパスワヌドを䜿甚しお重芁なサむトにログむンできないこずを望んでいたす。



これらの問題は䞡方ずも、デヌタを保護するマスタヌパスワヌドで解決されたすが、どこにも保存されたせん。 これは、Yandex.Browserの新しいパスワヌドストレヌゞアヌキテクチャに察する最初の芁件でした。 しかし、それだけではありたせん。



新しいパスワヌドマネヌゞャヌの安党性に関係なく、その人気は、その䜿いやすさにかかっおいたす。 同じ1Password、KeePassおよびLastPassが合蚈で1を超えるナヌザヌによっお䜿甚されおいないこずを思い出しおくださいただし、LastPassは組み蟌みのアドオンディレクトリで提䟛しおいたす。 たたは別の䟋。 そのため、叀い実装では、ブラりザはパスワヌドの保存を提案しおいたす。







経隓豊富なナヌザヌは、この通知に同意するか、拒吊するか、少なくずも䜕かを行いたす。 しかし、80のケヌスでは、圌らは単にそれに気付かないだけです。 倚くのナヌザヌは、パスワヌドをブラりザに保存できるこずすら知りたせん。



機胜に぀いおも蚀う必芁がありたす。 これで、パスワヌドのリストにアクセスするこずもそれほど簡単ではありたせん。 メニュヌを開き、蚭定をクリックし、詳现蚭定に移動し、そこでパスワヌド管理ボタンを芋぀ける必芁がありたす。 そしお、その人がログむンで゜ヌトできない基本的なアカりントのリストにアクセスし、テキストノヌトを远加したり、線集するこずもできなくなりたす。 さらに、パスワヌドマネヌゞャヌは新しいパスワヌドの䜜成を支揎する必芁がありたす。



そしおもう䞀぀。 新しいアヌキテクチャがKirkhoffsの原則ず䞀臎しおいるこず、぀たり、その信頌性は、䜿甚されるアルゎリズムに関する攻撃者の知識に䟝存しないこずが重芁でした。 暗号システムは、䜿甚するキヌ以倖のすべおを知っおいる堎合でも、安党なたたでなければなりたせん。



なぜ既補の゜リュヌションがなかったのですか



マスタヌパスワヌドず高床な機胜をサポヌトするオヌプン゜ヌス補品がありたす。 ブラりザに統合するこずもできたすが、いく぀かの理由で私たちには向いおいたせんでした。



KeePassが最初に思い浮かびたす。 ただし、そのストレヌゞは完党に暗号化されおおり、ブラりザでは同期は行ごずに機胜したす。 ぀たり、同期ごずにマスタヌパスワヌドを芁求するか、゚ントリを個別に暗号化する必芁がありたす。 2番目のオプションはナヌザヌに優しいです。 さらに、倧容量補品の堎合、デヌタベヌスをマスタヌパスワヌドでロック解陀する前に、保存されたパスワヌドを眮き換える可胜性をナヌザヌが認識しおいるこずが重芁です。そのため、䞀郚の情報は暗号化しないでおく必芁がありたす。



特殊なパスワヌドアドオンには、ナヌザヌがパスワヌドを忘れた堎合にマスタヌパスワヌドをリセットする機胜がありたす。 ただし、このためには、バックアップコヌドたたはファむルをダりンロヌドしお非衚瀺にし、倱わないようにする必芁がありたす。 䞊玚ナヌザヌの堎合、これは正垞ですが、他のすべおのナヌザヌにずっおは困難です。 したがっお、代替゜リュヌションを考え出す必芁がありたした。 ネタバレ最終的に、マスタヌパスワヌドをリセットできる゜リュヌションを芋぀けるこずができたしたが、Yandexでさえデヌタベヌスにアクセスできたせん。 しかし、それに぀いおは埌で。



いずれにせよ、ブラりザヌにネむティブに統合しC ++およびJavaに曞き換え、ナヌザヌにずっお十分にシンプルにするむンタヌフェむス党䜓を完党に眮き換えるには、サヌドパヌティの゜リュヌションを倧幅に倉曎する必芁がありたす。 驚くかもしれたせんが、新しいパスワヌドストレヌゞず暗号化アヌキテクチャの䜜成は、他の䜜業よりも簡単です。 したがっお、最初は互換性のなかった2぀の補品を1぀に接続するのではなく、独自の補品を改良する方が論理的です。



新しいマスタヌパスワヌドアヌキテクチャ



レコヌド自䜓を保存するのに異垞はありたせん。 信頌性が高く高速なAES-256-GCMアルゎリズムを䜿甚しおパスワヌドずメモを暗号化したす。䜿いやすさのためにアドレスずログむンを暗号化したせんが、スプヌフィングから保護するために眲名したす。 同じ1Passwordのストレヌゞスキヌムも同様に配眮されたす。



最も興味深いのは、パスワヌドの解読に必芁な256ビットのencKeyキヌの保護です。 これがパスワヌドセキュリティの鍵です。 攻撃者がこのキヌを認識するず、暗号化アルゎリズムの耇雑さに関係なく、ストレヌゞ党䜓が簡単にクラックされたす。 したがっお、キヌの保護は次の基本原則に基づいおいたす。



-暗号化キヌぞのアクセスは、どこにも保存されないマスタヌパスワヌドによっおブロックされたす。

-暗号化キヌは、マスタヌパスワヌドず数孊的に関連しおはいけたせん。



単玔なサヌビスおよびアプリケヌションでは、少なくずもブルヌトフォヌス攻撃を遅くするために、マスタヌパスワヌドをハッシュするこずで暗号化キヌが取埗されたす。 しかし、キヌのマスタヌパスワヌドぞの数孊的䟝存性により、ハッキングが簡玠化されたす。この堎合の速床は、ハッシュの信頌性のみに䟝存したす。 ハッキングされたASICプロセッサのファヌムはもはや珍しくありたせん。 したがっお、この堎合、encKeyキヌはマスタヌパスワヌドから掟生せず、ランダムに生成されたす。



encKeyキヌは、非察称RSA-OAEPアルゎリズムを䜿甚しお暗号化されたす。 これを行うために、ブラりザはパブリックpubKeyずプラむベヌトprivKeyのキヌペアを䜜成したす。 encKey鍵は公開鍵を䜿甚しお保護されおおり、秘密鍵を䜿甚しおのみ埩号化できたす。



pubKey公開鍵は、埩号化に適しおいないため保護する必芁はありたせんが、プラむベヌトprivKeyではストヌリヌが異なりたす。 盗難から保護するために、unlockKeyパスワヌドフレヌズを䜿甚したPKCS8芏栌に埓っおアクセスをブロックしたす。これは、PBKDF2-HMAC-SHA256関数を䜿甚しおマスタヌパスワヌドをハッシュ化した結果です10䞇回繰り返し、saltおよびstorage idを远加  マスタヌパスワヌドが誀っお任意のサむトから既に盗たれたパスワヌドず䞀臎する堎合、塩を远加するずこの事実が隠され、ハッキングが耇雑になりたす。 たた、十分に長いマスタヌパスワヌドの耇数のハッシュにより、unlockKeyを解読する耇雑さはencKeyキヌを解読するこずに匹敵したす。



暗号化されたパスワヌド、encKeyの暗号化されたキヌ、暗号化されたprivKey秘密キヌ、およびpubKey公開キヌは、ブラりザプロファむルに保存され、他のナヌザヌデバむスず同期されたす。



これをすべお理解しやすくするために、パスワヌド埩号化スキヌムを次に瀺したす。







マスタヌパスワヌドを䜿甚するこのアヌキテクチャには、いく぀かの利点がありたす。



-256ビットのストレヌゞ暗号化キヌはランダムに生成され、人工のパスワヌドず比范しお高い暗号匷床を備えおいたす。

-マスタヌパスワヌドのブルヌトフォヌスにより、攻撃者は最埌たで行かないず結果を知るこずができたせんpassword-PBKDF2-RSA-AES。 それは非垞に長く、非垞に高䟡です。

-ハッシュ機胜が損なわれた堎合、䞋䜍互換性を維持しながら、い぀でも代替のハッシュオプションに切り替えるこずができたす。

-攻撃者がマスタヌパスワヌドを芋぀けた堎合、デヌタ暗号化キヌがマスタヌパスワヌドに関連付けられおいないため、ストア党䜓を埩号化するための耇雑で危険な手順なしでパスワヌドを倉曎できたす。

-暗号化キヌは暗号化された圢匏で保存されたす。 YandexもYandexのパスワヌドを盗んだ攻撃者も、同期パスワヌドにアクセスできたせん。これには、どこにも保存されおいないマスタヌパスワヌドが必芁になるためです。



しかし、マスタヌパスワヌドを䜿甚するオプションには1぀の「欠点」がありたす。ナヌザヌはマスタヌパスワヌドを忘れるこずができたす。 これは、リスクを十分に認識しおいる経隓豊富なナヌザヌが䜿甚する特殊な゜リュヌションに関しおは正垞です。 しかし、数癟䞇人の芖聎者がいる補品では、これは受け入れられたせん。 バックアップオプションを提䟛しない堎合、倚くのYandex.Browserナヌザヌはマスタヌパスワヌドの䜿甚を拒吊するか、すべおのパスワヌドを䞀床「倱う」こずになり、ブラりザヌが非難されるこずになりたす驚かれるこずでしょうが、Yandexはしばしば極端な状況になりたすナヌザヌがアカりントのパスワヌドを忘れた堎合。 そしお、解決策を考え出すこずはそれほど簡単ではありたせん。



パスワヌドを明かさずにマスタヌパスワヌドをリセットする方法



䞀郚の補品では、埩号化されたデヌタたたはマスタヌパスワヌドをクラりドに保存するこずでこの問題を解決しおいたす。 このオプションは、攻撃者がYandexのパスワヌドを盗み、すべおのサむトからパスワヌドを盗む可胜性があるため、私たちには適しおいたせんでした。 したがっお、パスワヌドストアぞのアクセスを埩元する方法を考え出す必芁がありたした。この方法では、ナヌザヌ以倖はこれを行えたせん。 サヌドパヌティのパスワヌドマネヌゞャヌは、この目的のためにバックアップファむルを䜜成するこずをお勧めしたす。ナヌザヌはこのファむルを安党な堎所に独自に保存する必芁がありたす。 良い解決策ですが、普通のナヌザヌは必然的にそのようなバックアップキヌを倱うこずになるので、すべおが非垞に簡単になりたす。



繰り返しになりたすが、重芁な䟝存関係チェヌンを思い出しおください。 パスワヌドストアは、明瀺的にどこにも保存されおいないランダムキヌencKeyを䜿甚しお暗号化されたす。 このキヌは、privKey秘密キヌを䜿甚しお保護されたす。秘密キヌも明瀺的に保存されず、マスタヌパスワヌドからの耇雑なハッシュによっお保護されたす。 ナヌザヌがマスタヌパスワヌドを忘れるず、privKeyキヌを解読する機胜が実際に倱われたす。 これは、バックアップオプションずしお、privKeyキヌの耇補を保存できるこずを意味したす。 しかし、どこに そしお、圌を保護する方法は







埩号化されたprivKeyをクラりドに配眮する堎合、パスワヌドのセキュリティはYandexアカりントに䟝存したす。 そしお、たさにこれを蚱可したくありたせんでした。 明瀺的にロヌカルに保存するず、マスタヌパスワヌドによる保護はすべお意味を倱いたす。 このキヌを明瀺的に保存しおも安党な堎所はありたせん。 したがっお、暗号化する必芁がありたす。 これを行うために、ブラりザはランダムな256ビットキヌを䜜成し、privKeyの重耇を保護したす。 今から楜しい郚分です。 このランダムキヌは、ストレヌゞ甚にYandex.Passportクラりドに送信されたす。 暗号化された耇補は、ブラりザのロヌカルプロファむルに保存されたたたです。 クラりドもコンピュヌタヌも、パスワヌドを解読するための既補のペアを持たず、セキュリティが損なわれないこずがわかりたす。



このオプションを䜿甚するず、マスタヌキヌのリセットは、privKeyキヌが耇補された堎合にのみ実行できたす。 この機胜を同期されたデバむスに远加したかったのです。 各デバむスでバックアップキヌを手動で䜜成するのは䞍䟿です。耇補を䜜成するのを忘れたデバむスを誀っお手元に残しおしたう可胜性がありたす。 同期を䜿甚しお他のデバむスに暗号化された耇補を送信するこずはできたせん。そのキヌは既にクラりドに保存されおおり、セキュリティ䞊の理由からそれらを1か所で芋぀けるこずはできたせん。 したがっお、privKeyで暗号化された耇補は、暗号化の別のレむダヌを通過したす。 今回は、マスタヌパスワヌドのハッシュを䜿甚したす。 マスタヌパスワヌドはクラりドに保存されないため、結果の「入れ子人圢」はすでに安党に同期できたす。 他のデバむスでは、マスタヌパスワヌドが最初に入力されたずきに、远加の暗号化レむダヌが削陀されたす。



その結果、ナヌザヌがマスタヌパスワヌドを忘れた堎合、ブラりザヌを介しおパスワヌドのリセットを芁求し、Yandexパスワヌドで自分の身元を確認するだけで十分です。







ブラりザヌはYandex.Passportからキヌを芁求し、privKeyキヌの耇補を解読し、それを䜿甚しおencKeyキヌを解読し、pubKeyずprivKeyの新しいペアを䜜成したす。最埌のペアは新しいマスタヌパスワヌドで保護されたす。 パスワヌドストアは埩号化されないため、デヌタ損倱のリスクが軜枛されたす。 ずころで、encKeyにデヌタの倉曎ず暗号化を匷制するこずもできたす。蚭定でマスタヌパスワヌドをオフにしお再床有効にするだけです。



ナヌザヌ自身だけがマスタヌパスワヌドをリセットでき、圌が少なくずも䞀床は入力したデバむス䞊でのみリセットできるこずがわかりたした。 もちろん、ナヌザヌが自信を持っおいる堎合、バックアップキヌを䜜成する必芁はありたせん。 マスタヌパスワヌドも䜿甚できたせんが、砎棄するこずはお勧めしたせん。



新しいマネヌゞャヌの倉曎点は、新しいアヌキテクチャずマスタヌパスワヌドだけではありたせん。 䞊で述べたように、䜿いやすさず高床な機胜も同様に重芁です。



新しいパスワヌドマネヌゞャヌ



たず第䞀に、パスワヌドを保存するずいう申し出がある目立たない灰色のパネルを拒吊したした。 これで、ナヌザヌにはパスワヌドフィヌルドの隣にオファヌが衚瀺されたす。 これに気付かないこずはすでに難しいです。







そしお今、マネヌゞャヌ自身は蚭定で探す必芁がなくなりたしたボタンはメむンメニュヌで利甚可胜です。 保存されたアカりントのリストは、ログむン、アドレス、メモによる゜ヌトをサポヌトするようになりたした。 レコヌド線集も远加したした。







ヒントメモは怜玢をサポヌトしおいるため、タグの代替ずしお優れおいたす。







たた、ブラりザは䞀意のパスワヌドの䜜成に圹立ちたす。







最初のベヌタ版では、䜕もできたせんでした。 将来的には、䞀般的なサヌドパヌティ゜リュヌションずの互換性のために、パスワヌドの゚クスポヌトずむンポヌトをサポヌトしたす。 パスワヌドゞェネレヌタに蚭定を远加するずいうアむデアもありたす。







モバむルパスワヌドマネヌゞャヌ



もちろん、新しいロゞックずマスタヌパスワヌドのサポヌトは、コンピュヌタヌだけでなく、AndroidおよびiOS甚のYandex.Browserのバヌゞョンにも衚瀺されたす。 少し適応したす。 たずえば、マスタヌパスワヌドだけでなく、指王も䜿甚できたす。 たた、パスワヌドのリストを含むペヌゞでプログラムでスクリヌンショットを撮るこずも犁止したした。悪意のあるアプリケヌションを恐れるこずはできたせん。







今日、WindowsおよびmacOS甚のYandex.Browserのベヌタ版で新しいパスワヌドマネヌゞャヌを詊すこずができたすLinuxバヌゞョンは埓来、安定したコヌドに基づいお構築されおいるため、少し埌にリリヌスされたす。 近い将来、Android 版 Browserのアルファ版でも動䜜したすしばらくするずiOSのベヌタ版に衚瀺されたす。



数癟䞇人のナヌザヌ向けのシンプルだが信頌できるツヌルず、それを必芁ずするナヌザヌ向けの高床な機胜ずのバランスを垞に暡玢しおいたす。 ブラりザで芋たい理想的なパスワヌドマネヌゞャヌのビゞョンを共有しおください。



そしおもう䞀぀。 Bug Huntingプログラムの䞀環ずしお、新しいパスワヌドマネヌゞャヌの脆匱性を発芋できるように、セキュリティの専門家を招埅しおいたす。 あなたの助けを借りお、パスワヌドマネヌゞャはさらに安党になりたす。 よろしくお願いしたす



All Articles