web-dev-qa-db-ja.com

KWalletパスワード暗号化アプリケーションのセキュリティ?

http://gaganpreet.in/blog/2013/07/24/kwallet-security-analysis/ によると、KWalletパスワード管理システムは非常に弱く、キー分割、Blowfish 56、および塩なし。

キーの生成は次のように説明できます。ユーザーパスワードをそれぞれ16文字のブロックに分割し、それぞれにSHA1を2000回適用します。これは、塩を使わないストレッチです。これらのブロックはトリミングされて連結され、Blowfish暗号で許可される最大キー長である56バイトに収まります。

また、CBCを使用していますが、使用方法はECBになります。

KWalletはCBCを使用します。正確には、CBCに使用されるキーサイズは暗号化される文字列の長さです。これにより、CBCは安全性の低い暗号化モードであるECBになります。

私の問題は、KWalletと同じパスワードをrootに使用することです。/etc/shadowはrootだけが読み取ることができますが、私の.kwlファイルは誰でも読み取ることができるので、誰でもファイルを取得してブルートフォースを試み、成功する可能性があります。

KWalletのセキュリティを向上させる方法はありますか?これは、手動で入力したパスワードだけでなく、KWalletを使用してパスワード(Chromiumなど)を保存するWebブラウザーやアプリケーションにも使用できるため、別のプログラムに切り替えることはできません。おそらく、ソースコードを編集したり、互換性のあるフォークを見つけたりできますか?

私の最後の質問は、次のとおりです。KWalletのセキュリティを向上させる方法はありますか?それを使用することで、セキュリティ上の懸念はどのくらいありますか?

10
taree

あなたが引用しているブログ投稿は、その定式化においてかなり不正確です。ただし、KWalletのソースコード、特に this file (パスワードハッシュ用)および that file (暗号化コードの呼び出しについて)、次のようになります。

パスワードは、SHA-1を繰り返し適用することにより、サイズが20、40、または56バイト(160、320、または448ビット)の対称鍵に拡張されます。つまり:

  • パスワードの長さが0〜16文字の場合、キーの長さは20バイトで、パスワードにSHA-1を繰り返し適用(2000回)します(パスワードがハッシュされ、20バイトの出力が再度ハッシュされます)。再度、SHA-1の2000回の呼び出しについて)。

  • パスワードの長さが17〜32文字の場合、キーの長さは40バイトになります。最初の16文字は上記のように処理され、残りの文字も同様に処理され、さらに20バイトになります。

  • パスワードの長さが33から48文字の場合、キーの長さは56バイトになります。最初の16文字は上記のように処理され、2番目のチャンクは16バイトの文字、3番目のチャンクも同様です。その後、最初のチャンクの出力は16バイトに切り捨てられ、合計で56バイトになります。

  • パスワードの長さが49文字以上の場合、2000 SHA-1呼び出しは4回発生します。 4番目のチャンクでは、パスワードの残りすべてが使用されます。次に、4つの20バイト出力がそれぞれ14バイトに切り捨てられ、これらが連結されて56バイト出力が生成されます。

パスワードハッシュ関数としては、かなり貧弱です。それは不格好で、規則的ではありません。ソルト化されていないため、複数のKWalletインスタンスを破壊する必要がある場合に、効率的な並列攻撃が可能になります(通常、「並列処理」とは、事前計算されたテーブルを使用できるため、2000 SHA-1呼び出しの速度低下効果を打ち消します)。さらに、パスワードを「分割」するため、攻撃者がパスワードハッシュを見つけた場合、各チャンクを他のチャンクとは無関係に攻撃できます。つまり、全体のセキュリティは、Blowfishブロック暗号がハッシュ関数として使用された場合の動作に大きく依存します。これはせいぜいよく研究されていない物件です。

暗号化はCBCを使用することを意図していますが、そうではありません。 CBCでは、一連のblocks(Blowfishではブロックあたり8バイト)を暗号化することになっています。ブロックを暗号化する前に、まず前の暗号化されたブロックとXORされます。最初のブロックでは、正式な「前のブロック」である Initialization Vector を呼び出す必要があります。 CBCはランダムIVを必要とします。

KWalletコードでは、コードが実際に適切なサイズのランダムなIVを準備していることがわかります。その後、完全にCBCを実行できません。暗号化の呼び出しは次のとおりです。

_int rc = bf.encrypt(wholeFile.data(), wholeFile.size());
_

(_backendpersisthandler.cpp_の291行目)

このencrypt()メソッドの実装を見ると、 _cbc.cc_ で、同じサイズの一時バッファーが作成されることがわかりますファイル全体。次に、ゼロで埋めます。次にXOR暗号化するデータを含むこれらすべてのゼロ(データを変更しない...));次に、各ブロックを相互に独立して暗号化します。これは実際にECBモードです、CBCではありません。これはプログラミングエラーであることは明らかです。ただし、KWalletが機能しているように見えるため、エラーは検出されなかったということを覚えておいてください。セキュリティをテストできません機能を介して

(これは、計算されたランダムIVがここでは何もしないことを意味します。それ自体は暗号化されますが、ファイル全体の他のバイトには影響しません。)

ECBモード は、次の意味で脆弱であることがわかっています。どのブロックが互いに等しいかについての情報をリークします。非圧縮画像の場合、通常のペンギン画像で示されているように、これは致命的です。 KWalletの場合、これは心配の種です。内部構造にはある程度の冗長性があり、これはmayが悪用可能ですが、問題の範囲を確認するには多少の努力が必要です。

パスワードがソルト化されていないため、同じパスワードで保護された2つの連続するバージョンのKWalletは同じ対称鍵を使用することに注意してください。したがって、ECBによってリークされたブロック等価は、連続するすべてのバージョンのKWalletに適用されます。

自家製のMACがあります。ファイルの最後の20バイト(一部のパディングを除く)には、残りの部分に対して計算されたSHA-1値が含まれています。これは一般的に言って、良いMACではありません。暗号化でRC4またはCTRモードのブロック暗号を使用した場合、これは非常に悪いMACになります。 ECBモードのブロック暗号(ここで使用)を使用すると、それほど悪くはありませんが、依然として不十分です。


概念を習得しなかった誰かが手作りの暗号のコード全体を叩きました。これは悪いです。また、コードは多くの点で凶悪であることがわかります(たとえば、パスワードチャンクがハッシュされると、SHA-1を繰り返し呼び出すループが容赦なく複製されます。これは銃撃の違反です)。 KWalletを「改善」するには、コード全体を削除して、ゼロから始めることをお勧めします。

それはseemsコードにパスワードのハッシュ化と暗号化自体を行わないためのオプションのサポートが含まれていることを確認しました(これまで見てきたように、非常に不十分です)代わりに GnuPGを使用します 。これは良い考えです。 GnuPGは OpenPGP形式 を実装しています。これは、すべての欠点について、暗号的に言えば(適切に使用された場合)少なくともまともであり、GnuPGも許容できる良好な実装であることが知られています。 KWalletのストレージを改善するには、このGnuPGサポートコードと形式を使用するようにコンピューターを説得できるかどうかを確認してください。

9
Tom Leek

問題の元のブログ投稿を書いたのは私です。また、KWalletファイルを読み取るための Pythonスクリプト も作成しました。これは、元のKWalletコードよりも理解しやすいはずです。

トムは彼の分析にもスポットを当てています。私は平均的なユーザー向けに書こうとしましたが、技術的な詳細については掘り下げませんでした。 KWalletコードは恐ろしい状態にあり、説明されているセキュリティの問題を除いて、コードは十分に文書化されていません。 KDE 5は完全に新しいパスワードストアを提供しますが、それはまだしばらくの間です。

GnuPGを搭載したKWalletは開発中ですが、まだリリースされていません。 KDE 4.12に付属しています。

3
Gaganpreet
  • 最初にすべきことは、rootと同じパスワードを使用しないことです。ルートは神聖です!
  • TrueCrypt ボリュームを作成してそこにドロップすることで、パスワードデータベースをより適切に保護できます。
  • ソースコードを編集することはできますが、自分が何をしているか本当にわかっている場合に限られます。ソースで何をすべきか正確にわからない場合は、事態を悪化させる可能性があります。
  • 最後に KeePass を見てください。これはオープンソースであり、クロスプラットフォームであり、優れたパスワードジェネレーター/マネージャーです。
2
Four_0h_Three

おい!暗号がぐちゃぐちゃになってしまうので、まずはセキュリティ対策から始めましょう。

chmod 600 *kwl

なぜあなたのKWalletファイルはあなた以外の誰にも見えないのですか?!?

第二に、他に誰がコンピュータを使用するか、または他の方法であなたのものにアクセスできますか?コンピューター、ルーター、プリンターを含む有線ネットワーク上で自宅の半分ほどのルーターの後ろに座っている場合は、暗号強度よりも重要なことは他にもあるでしょう。

第3に、TrueCryptはすばらしいですが、設定するのに少し頭痛の種になる可能性があります。ディストリビューションに組み込まれているユーザーホームディレクトリの暗号化を使用できます(openSUSEでは、ユーザーホームディレクトリを暗号化するためのチェックボックスをオンにするオプションがあります)。ただし、最終的にはホームディレクトリのサイズが固定されます(ソート-そこに追加のものをマウントして、望みの大きさにすることができます)。

やや最新のSSDを使用している場合は、ハードウェア暗号化が組み込まれている可能性があります(ビジネスクラスの製品で使用されている多くのラップトップHDD、特に日立は7200 RPM 2.5ドライブにこれを搭載しています)。成長する足。 BIOSにログインすると(通常)、キーがロックされるため、システムを使用している人は、少なくともマシンをリセットするまで、ひどく邪魔されることはありません。それでも、すべてのラップトップに適したアイデアであり、ハードウェア暗号化はCPUオーバーヘッドがないことを意味します。

もう少しリスクのある別のオプションは、ウォレット(KeepassでもKDEでも、汎用のbog標準のキーリングでも)をクラウド同期ディレクトリに置くことです。 MicrosoftとAppleは顧客を使用してLinuxにこれを配信する方法を理解するのにいくつかの技術的な問題があったようですが、DropBoxとCopy.comはまともなLinuxクライアントを持っています。私は好意的にコピーに感銘を受けました.comのセキュリティ対策は人間が運営する会社なので、いつか何かが起こる可能性があります。

私は何年にもわたってポケットからいくつかのUSBドライブを紛失してしまったので、深刻な保護なしにキーをその上に保持することにあまり熱心ではありません。これは、TrueCryptレベルのパラノイアがおそらく役立つ場所です。欠点は、TrueCryptを他の誰かのマシン(あなたの義理の兄弟などのKinkos)に確実にマウントできるとは限らないことです。代替案は暗号化です(簡単な方法:7Zipは移植可能でほとんどすべてのOSにあり、256AES暗号化のサポートが組み込まれています。より困難な方法:GNU Privacy Guard(GPG、オープンソースのPGPの代替手段)ほとんどのプラットフォームでも使用できます。WindowsでもUSBドライブから実行できると思います。AESを使用する方法は他にもいくつかあります。TwofishまたはSerpentを使用する方法もあります(よりエキゾチックですが、おそらく同じように使用できます)この使用)。

USBを使用してパスワードを持ち運ぶ場合、ポータブルアプリ(可能な限り削除されたRAMドライブまたはディレクトリが暗号化されるディレクトリ)を使用して、できるだけ多くのソフトウェアを実行しますChromeで問題が発生しましたが、PortableApps.comのほとんどのものがWINEで問題なく動作します(ただし、Windowsの醜い外観を除いて)。アルミホイルの帽子がきつくなっている場合は、 Torの人々は、Torに接続された半強化型Firefoxのポータブルバージョンを持っています。これは、USBドライブからダウンロードして実行することもできます。

キーストアの暗号化解除について規則を守らなければならず、完了したら、安全なワイププログラムを使用してUSB(またはその他の)ドライブからトレースをクリーンアップします。また、コピーをRAMやキャッシュスワップスペースなどに残しておくため、すべてのキーが失われたことを確認するには、再起動が必要になる可能性があります。

繰り返しますが、これをUSBドライブから実行する場合、ポケットから落ちて、本当に嫌いな人や悪用しようとしている人に見つけられると思います。したがって、オフラインファイルや履歴の自動削除などは行わず、完了したら、bleachbitまたはPortableAppsに付属のポータブル消しゴムプログラムを実行します。

ソリューションが何であれ、それをテストする最良の方法は、数週間信心深く使用し、その後停止することです(以前の悪い習慣にあったものに戻ります)。次に、すべての詳細を忘れた後、通常のツールと慣習的なツールを使用して、自分のものにハッキングします。少し鼻。今日のLinuxディストリビューションが、あなたの家の壁に囲まれた庭の中にしか住んでいないと思っていたものを貼り付けるところがすごい。

元の投稿の後でこの年につまずくかもしれない他の人たちのために今私の嘆願:KDEにKeepassの統合が必要です。多分彼らはGNOMEやXfceなどでそのようなものを必要とするかもしれませんが、私(そして正直なところ、私のクールな友達も誰も)がそれを実行しているのに夢中にならないので、それはそれほど重要ではありません。

KWalletの代替としてKeepassXを使用する方法を理解しようとしています。それはもう少し安全で、私がそのいまいましいWindowsのがらくたを使わざるを得なくなったとき、移植性があるという利点があります。

1
user2351170