検索
連載

Windows 10でUSBメモリに書き込んだファイルが読めない場合の原因と対策(FATのEFS暗号化編)Tech TIPS

Windows 10でUSBメモリに書き込んだファイルが、持ち出し先のPCで読み出せない!? それは、知らないうちにUSBメモリ内のファイルが暗号化されたせいかもしれない。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
「Tech TIPS」のインデックス

連載目次

対象OS:Windows 7/Windows 8/Windows 8.1/Windows 10/Windows Server 2008 R2/Windows Server 2012/Windows Server 2012 R2/Windows Server 2016


 Windows 10でファイルをUSBメモリにコピーして社外の人に渡したり、出張先や自宅へ持っていってPCに接続したりしたところ、読み出せなくて困ったことはないだろうか?

 もしそうなら、それはWindows 10の新機能、FATファイルシステム向けの暗号化ファイルシステムのせいかもしれない。本TIPSでは、そんな症状が発生するケースと、その対応方法についてまとめておく。

こんな症状ならWindows 10の「新機能」が原因

 Windows OSにはファイルを暗号化するEFSという機能があるが(詳細は後述)、これは本来NTFS上でしか使えない機能だった。だがWindows 10ではFAT上でも使えるようになった結果、知らないうちにUSBメモリ上のファイルが暗号化されて、このような症状が起こるようになった。

 USBメモリにコピーしたファイルが暗号化のためにアクセスできない場合、その症状には2通りある。そこにファイルが存在するのに開こうとするとエラーになる場合と、保存したはずのファイルそのものがなくっていて(よく見ると、少し異なる名前のファイルは存在しているが)、開くことができない場合だ。

●症状1:ファイルを開こうとしてもアクセス拒否になる(Windows 10の場合)

 Windows 10の場合、FAT上のファイルをEFSで暗号化しても、ファイル名やサイズ情報などはそのまま維持されている(ように見える)。なので、ダブルクリックして開こうとするが、エラーになってしまう。

コピー元とは別のWindows 10上でファイルを開こうとした例
コピー元とは別のWindows 10上でファイルを開こうとした例
コピー元とは別のWindows 10のPC上で、USBメモリ中のファイルを開こうとしたところ。.docxファイルであることは認識しているが、ファイルの内容を読み出すことができない。
  (1)このファイルをダブルクリックしてみる。
  (2)エラーメッセージの例。たいていのアプリでは、暗号化されていて読めない、とは言わないので分かりづらい。
  (3)暗号化されているファイルやフォルダにはこのような鍵マークが付いている。
  (4)この例では暗号化ファイル名を緑色で表示するように設定しているが、Windows 10のデフォルトは黒字なので分かりづらい。

 エクスプローラの画面をよく見ると、各ファイル名のアイコンには小さな「鍵」マークが付いている。これは、ファイルが暗号化されていることを表している。

 ちなみに以前のWindows OSでは、暗号化されたファイル名は緑色で表示されていたが、Windows 10では緑色にならないので分かりづらいかもしれない。緑色にするには、エクスプローラのオプション設定で「暗号化や圧縮されたNTFSファイルをカラーで表示する」をオンにする。

●症状2:USBメモリ中のファイルの拡張子が .PFILE になっている(Windows 10以外の場合)

 Windows 10よりも前のWindows OSでは、FAT上では暗号化はサポートされていない。Windows 10ではFAT上での暗号化をサポートするために、少し込み入った仕組みを採用している。暗号化対象のファイルの拡張子を「PFILE」に変更し、その中に暗号化に必要な鍵情報や、暗号化されたデータそのものを保存している。例えばファイル「機密文書1.docx」を暗号化すると、FAT上では「機密文書1.docx.PFILE」という名前になる。

古いWindows OS上で暗号化ファイルを見た例
古いWindows OS上で暗号化されたファイルを一覧した例
いくつかのファイルの名前が *.PFILE となっているが、これが実際にFAT上に保存されている時のファイルの名前である。Windows 10では、このタイプのファイル名に対しては、自動的に暗号化を解除して元の名前を表示するようになっているが、古いWindows OSではそのような機能は持たないため、本当の名前が直接露出している。
  (1)暗号化されていない通常のファイル。
  (2)暗号化されているファイル。ファイル名の末尾に.PFILEという拡張子が付いている。
  (3)暗号化されていないフォルダ。
  (4)暗号化されているフォルダ。この中に作成されたファイルは、自動的に最初から暗号化の対象となる。

対策:コピー元で暗号化を解除するしかない

 上記のようにWindows 10のFAT向けEFSが原因の場合、現実的な対処方法は、ファイルのコピー元のWindows 10にUSBメモリを挿し、いったん暗号化を解除してからUSBメモリにコピーし直すか、USBメモリ上でファイルの暗号化を解除することだ。

 それには元のWindows 10で、コピー元のファイルやフォルダを全部選択してプロパティ画面を表示させ、[詳細設定]のボタンをクリックして、暗号化の属性を全て外せばよい。コマンドプロンプトを使う場合は、「cipher /d 〜」コマンドで暗号化属性を解除できる。あとは普段の手順で解除済みのファイルをUSBメモリにコピーすればよい。

暗号化の解除
暗号化の解除
暗号化を解除するには、ファイルやフォルダを選んでプロパティ画面を表示させ、暗号化の属性を外す。この操作は、必ず、最初にUSBメモリを作成したPCで行うこと。他のPCではユーザーが異なるため(正確にはユーザーの暗号化の証明書が異なるため)、暗号化を解除できない。
  (1)ファイルやフォルダのプロパティ画面を表示させ、これをクリックする。
  (2)この[内容を暗号化してデータをセキュリティで保護する]をオフにする。

 持ち出し先のPC単体でファイルの暗号化を解除することは、ほぼ不可能である。コピー元のPC上での操作や協力が必須だ。そのため、

  • USBメモリ(FAT)上のEFS暗号化は使わない
  • Windows 10上でUSBメモリにファイルをコピーしたら、暗号化されていないか確認する。暗号化されたファイルがある場合は解除しておく
  • USBメモリの暗号化にはEFSではなくBitLocker To Goを利用する

という運用が望ましい。その理由や根拠など詳細は、この後に順次説明していく。

そもそもEFSとは?

 それにしても、なぜWindows 10からこのようなトラブルが生じるようになったのだろうか。それを知るには、Windows 2000の頃から利用できる「暗号化ファイルシステム(EFS:Encrypting File System)」という機能をひもとく必要がある。

 EFSは、ファイルやフォルダの内容を暗号化して、適切なアクセス権を持たないユーザーに対しては、ファイルの内容を読めないようにする機能である。EFSはWindows OSのログオン(サインイン)アカウントと密接に結び付けられており、基本的にはファイルを作成したユーザーなら何の制限もなく読み書きできる。一方、そうでないユーザーなら、ファイル名は見えるものの、その内容を表示させたり、書き込んだりすることはできない。

 EFSの操作方法そのものは簡単で、ファイルのプロパティ画面を表示させて、暗号化のためのチェックボックスをオンにするだけだ。コマンドプロンプトを使う場合は、「cipher /e 〜」コマンドで暗号化属性を設定できる。

 ただしファイルごとに設定を行うのは大変なので、通常は、暗号化データ保存用のフォルダを1つ作成し、そのフォルダに暗号化属性を付けておく。そうすると、そのフォルダ中に作成されるファイルは全てデフォルトで暗号化属性がオンになる。重要な情報を扱っている場合は、このような使い方をしているかもしれない。

 ファイルをコピーした場合でも、暗号化属性は(可能な限り)維持されたまま(暗号化されたまま)になる。例えばアプリなどから新規保存されたファイルは、保存先フォルダの暗号化属性に従う。

 EFSの使い方については以下のTIPSも参照していただきたい。

EFSで暗号化されたファイルをNTFSからFATへコピーすると?

 Windows 10より前のWindows OSの場合、EFSはNTFSだけに対応していて、FATでは利用できなかった。USBメモリでは通常FATが使われているため、NTFS上の暗号化されたファイルをUSBメモリにコピーする場合、必ず暗号化が解除されて通常のファイルとなっていた。そのためわざわざ暗号化を解除しなくても、持ち出し先のPCでは普通に読み出すことができた。

NTFSからFATへのコピー
NTFSからFATへのコピー
これはWindows 8.1上でNTFS上の暗号化されたファイルをFATへコピーしようとしているところ。以前のWindows OSでは、NTFS上からFATへコピーすると、暗号化属性は解除され、非暗号化ファイルに戻っていた。だがWindows 10ではFATでも暗号化されたまま保存される。
  (1)暗号化を解除するかどうかの問い合わせ。
  (2)暗号化されたファイルを暗号化をサポートしていない場所へコピーしようとすると、このようなメッセージが表示される。
  (3)これを選択すると、暗号化されていない通常のファイルとしてコピーされる。FATなのだから、しょうがない。

 だが、2016年8月にリリースされたWindows 10のバージョン1607(Anniversary Update,RS1)やWindows Server 2016なら、FAT(FAT16やFAT32、exFAT)上でもEFSを利用できるようになっている(*1)。これらのWindows OSでは、暗号化された状態のままFATにコピーされる(当然だが、暗号化を解除する権限/証明書情報がないとコピーできない)。

 つまりWindows 10では、ファイルがEFSで暗号化されたままUSBメモリにコピーされるようになった、ということだ。持ち出し先のPCでは、暗号化を解除(復号)するまでそのファイルの内容を読み出せない。

*1FAT上のEFSをサポートするWindows 10のバージョンについて
 FAT上のEFSサポートは、Windows 10のバージョン1607(RS1)からの新機能である(EFSはPro/Enterpriseエディションでのみサポート)。
 だが、それ以外のWindows 10でも限定的ながら利用できる。
 バージョン1507(TH1)/バージョン1511(TH2)では、NTFS上に作成したEFSファイルを暗号化したままFATへコピーすることができる(ただしFAT上で直接暗号化するのは不可の模様。これを実行するとファイルが壊れるなどの症状が発生した)。
 Homeエディションでも証明書をインポートすれば、暗号化ファイルの読み出しだけはできるようである。


暗号化されたファイルを復号するには?

 EFSでは「公開鍵暗号システム」(「暗号化の基礎」参照)を使ってファイルを暗号化している。ユーザーの「公開鍵」で暗号化し、「秘密鍵」で復号する。そのため、暗号化したのとは異なるPCで復号したい場合、暗号化を行ったユーザーの秘密鍵とその証明書(「暗号化ファイルシステム」用の証明書)の情報がないと復号できない。

 Active Directoryドメインに参加している場合は、公開鍵や秘密鍵、証明書などの情報はActive Directory経由でアクセスできる。そのため、Active Directoryに参加しているPC/ユーザー間であれば、ユーザーはEFSを使う場合でも特に難しい操作は必要ない。

 一方、Active Directoryからワークグループ環境へ、あるいはワークグループ環境内のPC間で暗号化ファイルを移動させると、この鍵情報の手動での受け渡しが必要になる(これはFATのEFSだけに限った話ではなく、NTFS上のEFSでも同じ)。USBメモリでファイルを渡す場合、大抵はこれに該当するだろう。

 その場合、USBメモリを渡す相手がWindows 10なら、証明書情報などを受け渡すことでなんとか対処できなくもない。一方、Windows 10でない場合は、ファイルの形式の問題で復号はほぼ不可能である。

 よって、どの環境でも利用できる一番簡単で確実な解決方法は、前述のように、暗号化を行った(USBメモリを作成した)PC上で、あらかじめ全ファイルの暗号化の解除操作を行っておくことである。

暗号化を使わないようにするには?

 そもそもEFSを使わなければこんな面倒なことは起こらない。EFS機能を無効にするには幾つか方法があるが(EFSが無効でもWindows OSは特に問題なく動作する)、管理者権限でコマンドプロンプトを開いて次のコマンドを実行すればよい。実行後は再起動すること。

fsutil behavior set disableencryption 1




EFSで暗号化したままのFATのUSBメモリをWindows 10で読み書きするには?

 USBメモリを渡す相手がWindows 10のPCなら、ユーザーの「暗号化ファイルシステム」用証明書を移行させることでファイルを読めるようにすることもできる。その手順は次の通りである。

  1. USBメモリを作成したPC上で、暗号化のための証明書と秘密鍵情報をエクスポートする
  2. USBメモリを読み書きしたいPC上で、証明書情報をインポートする

 具体的な手順についてはTIPS「暗号化ファイルシステムEFSを読み出すために証明書をエクスポート/インポートする」を参照していただきたい。

 だがここまでするなら、元のPC上で暗号化を解除する方が簡単である。

 持ち出すUSBメモリを意図的に暗号化したいなら、BitLocker To Goの方が簡単で便利だ。例えば持ち出し先のPC単体でも、パスワード1つで簡単に暗号化を解除できる(「超入門BitLocker」参照)。

 安全のため、どうしてもEFSで暗号化したままにしておきたいなら、USBメモリをFATではなくNTFS形式でフォーマットするという方法もある。NTFSなら古いWindows OSでも暗号化したファイルを正しく取り扱える(ただしEFSを使う限り、証明書のエクスポート/インポート操作は必要。なので、リムーバブルデバイスにおけるデータの保護用途ではEFSはあまり推奨されない)。

ファイルの名前が「〜.PFILE」になっている場合は?

 Windows 7やWindows 8/8.1などではFAT上のEFS機能はサポートされておらず、Windows 10で暗号化したFAT形式のUSBメモリは次のように見える。

E:\>dir ……ファイルの一覧を確認する
 ドライブ E のボリューム ラベルは FATUSBMEM です
 ボリューム シリアル番号は 64C6-63A3 です

 E:\ のディレクトリ

2017/03/09  11:45      595,030 ToDo.docx ……暗号化されていないファイル
2017/03/09  12:10      721,360 ZZ計画4.pptx.PFILE ……暗号化されているファイル
2017/03/09  11:28      781,552 秘密文書1.docx.PFILE
2017/03/09  12:41       26,560 秘密文書2.xlsx.PFILE
2017/03/09  11:35        9,376 文書(暗号).txt.PFILE
2017/03/09  11:35        5,268 文書(非暗号).txt
2017/03/09  12:42    <DIR>     ラーメン情報  ……暗号化されていないフォルダ
2017/03/09  15:39    <DIR>     機密データ  ……暗号化されているフォルダ。フォルダの場合は、暗号化しても名前は変わらない。代わりに、中に特別なファイル($EFS)が保存され、そこに暗号化情報が書き込まれている
          6 個のファイル           2,139,146 バイト
          2 個のディレクトリ   7,991,529,472 バイトの空き領域
E:\>



 「〜.PFILE」という拡張子の付いたファイルが幾つかあるが、これが暗号化されたFAT上の本当のファイル名である。その内容は、暗号化のための鍵などの情報と暗号化されたオリジナルのデータである。サイズは元のファイルよりも4KB程大きくなる。ちなみに、この〜.PFILEのパス名やフォルダ構造などは厳密に管理されており、勝手に変えると暗号化ファイルとして認識されなくなるので注意が必要だ。

 持ち出し先のPCで、このファイルを復号する方法は(ほぼ)ない。ファイルを作成したWindows 10上で暗号化を解除するしかない。

Copyright© Digital Advantage Corp. All Rights Reserved.