パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

Mozilla、ファイルアップローダ「Send」をテスト公開」記事へのコメント

  • by Anonymous Coward

    動画見た感じだとブラウザで暗号化するのかな。
    リンクもブラウザで生成してサーバ経由しないなら安心。
    でも復号キーもリンクに含まれるんだから、結局ダウンロードすればMozilla側に漏洩するってことだよね。

    • Re: (スコア:2, 参考になる)

      by Anonymous Coward

      ソース [github.com]を読んでみた。

      1. 送信側はブラウザー上で暗号鍵を生成して、その暗号鍵で暗号化したファイルをサーバーに送信する(暗号鍵は送らない)。サーバーはそのファイルをダウンロードするためのURLを返す。
      2. 送信側はサーバーから返されたURLに暗号鍵の情報をフラグメントID("#"以降の部分)として追加し、(何らかの安全な経路で)受信側に渡す。
      3. 受信側は、渡されたURLでサーバーにアクセスする。フラグメントIDはサーバーに送信されない(URLの仕様)。
      4. サーバーは、暗号化されたファイルを返す。
      5. 受信側は、フラグメントIDから読み取った暗号鍵を使ってブラウザー上でファイルを復号する。
      • モダンブラウザーが必要な理由は、暗号化・復号にWebCrypto APIを使っているから。
        あと暗号化を全部メモリ上でやっているので、(1GB制限しなくても)あまり大きすぎるファイルはメモリ不足で扱えない。

        Windowsなら「仮想メモリ」設定で「ページング ファイルなし」にしていない限り、
        大きいファイルでも仮想メモリが使われるだけなので、メモリ不足で扱えないなんてことは起こりません。

        暗号鍵とかそういう機密データがHDDやSSDにスワップするのはセキュリティ上好ましくないからといっても
        Windowsは欠陥OSなのでアプリ側からスワップを回避するのは困難(というかOSのカーネルレベルを書き換えないと無理)です
        だから、WebCrypto APIもスワップを完全

        • by Anonymous Coward on 2017年08月08日 7時16分 (#3257704)

          Win32APIのVirtualLock()が機能しないケースがあるってこと? 初めて聞いたしググっても出てこないな。
          ソースあります?

          親コメント
          • by Anonymous Coward on 2017年08月09日 0時15分 (#3258242)

            自己レス。適切な解説 [microsoft.com]を見つけた。

            • VirtualAlloc()ではできない。なぜならVirtualAlloc()はメモリ上に置かれることを保証するのではなく、スレッドのワーキングセットに置かれることを保証するものだから。そのため、スレッドが停止している場合はスワップされる可能性がある。
            • データをメモリに置くことを保証したいのなら、AWE関数群 [microsoft.com]ならできるのでそっちを使え。AWE関数群はデータベース製品など、自分でメモリ管理を行いたいソフトウェア向けのAPIだ。
            • ただしセキュリティの観点からは無意味。なぜならメモリ上にあってもReadProcessMemory()で他のプロセスからデータを読まれるから。別にメモリ上にあるからセキュリティが高まるなんてことはない。
            • セキュリティの目的で、プロセス内で少量のデータを安全に保持したい場合は、CryptProtectData()/CryptUnprotectData()という関数を使う。これは、ブート時に生成された疑似乱数に基づいて、カーネルモードでデータを暗号化・復号化する。

            というわけで、WindowsではAWE関数を使えばできるが、セキュリティの目的ならば
            メモリ上に維持することに血道を上げるのではなく、CryptProtectData()/CryptUnProtectData()を使うのが正しい。
            これによって、秘密データを生のまま保持する時間を極めて短時間にできる。
            これによってスワップファイルへのオフラインクラックのリスクも極小になるが、さらにそれも防止したいなら、これにBitLockerを組み合せろということなんだろう。

            VirtualAlloc()の動作は、これのAPIが専らパフォーマンス向上目的であることを考えればそんなに不思議でもない。
            スレッドが停止しているときにメモリだけ確保する意味はないので。
            停止しない処理に対して使う限りは、意図通りに作用してくれるだろう。

            全体として、合理的でセキュアな設計だと思う。
            TrueCryptの作者がAWE関数群を知らなかったのは、不勉強だったというしかないな。

            親コメント
            • by Anonymous Coward

              非常に参考になった。
              参考になるとか、素晴らしい洞察のモデをあげたいところだが、ACなのでモデ権がないのが残念でならない。

          • by Anonymous Coward

            そもそもVirtualLock()の仕様読めよ

            • by Anonymous Coward

              元コメだけど、読んだ上で書いたのよ? あなたこそ読んだの?

              以下のように、「ページファイルに書かれないことが保障される」とはっきり書いてある(要するにドキュメントの誤り)。

              Pages that a process has locked remain in physical memory until the process unlocks them or terminates. These pages are guaranteed not to be written to the pagefile while they are locked.

              https://msdn.microsoft.com/en-us/library/windows/desktop/aa366895(v=vs... [microsoft.com]

              このドキュメントが誤りであることは、#325824

          • by Anonymous Coward

            Win32APIのVirtualLock()が機能しないケースがあるってこと? 初めて聞いたしググっても出てこないな。
            ソースあります?

            A.8.4 Pageant は VirtualLock() を使って秘密鍵がディスクに書き込まれないようにできませんか [ranvis.com]

            残念ながらできません。 Windows API の VirtualLock() は適切に動作しません。プロセスの動作中にプロセスメモリの一部がディスクにページアウトしないようにできますが、プロセスが長期間非アクティブなときにプロセスメモリ全体をディスクにスワップアウトしないようにはできないのです。

            ほかにも罠があって、この関数は成功すると0以外の値が返る仕様なのに、Windows 9x だと常に失敗するのに成功扱いの「0以外」が返っ [microsoft.com]

ハッカーとクラッカーの違い。大してないと思います -- あるアレゲ

処理中...