さて、本日はBitLockerのお話でも。
Windows10 1511では結構あちこちに手が入っているのは周知の事実。
その中でも、個人的にはかなりの注目ポイントだと思われるのに、世間では全く取り上げられていないネタが一つ。
「Windows10 1511からBitLockerでXTS-AESがサポートされた」
漸くというか何で最初から無かったのといか、そういうレベルではあるが。
これでBitLockerも漸く「世間並の暗号化強度」と胸を張って言えるようになりました・・・のだが。
これが世間で全く注目されないということは、やっぱりストレージ暗号化なんて世間では全く流行っていないってことよね、コレ。
一方で、従来Windows8から使われてきたAES-CBCについて、何だか微妙に誤解されているような雰囲気も。
ということで、今回はBitLockerの歴史と暗号強度の話でもしてようかと。
◆
まず、暗号化ってのは当然ながら強度が高い方がいい。
但し実際には互換性や処理能力からどこかで「妥協」が発生するので、実際にはこの「妥協」点が適切か、という話になるのですよ。
◇
ということで、まずは初代BitLockerから。
いわゆるNT6カーネル→Windows Vista~7、2008~2008R2にて実装。
暗号化モードはAES-CBCで128bit(こちらが標準)または256bit、更にElephant Diffuserが標準で付いてくるが、使用しない設定も可能。
最大の特徴はElephant Diffuserという難読化(というか掻き混ぜというか)アルゴリズムを使っていることで、AES-CBCにおける攻撃耐性の弱さをこれでカバーしている。
一方で欠点もElephant Diffuserに存在し、何しろコレはAESのような標準化された手法ではないのでハードウェアアクセラレーションが効かず、結果としてBitLockerの重さの主原因となってしまったと言われている。
ちなみにこの初代BitLockerの詳細についてはMITのサイトに公開されているMSの論文(https://css.csail.mit.edu/6.858/2013/readings/bitlocker.pdf)にかなり詳しく書かれているので興味ある方は一読を。
◇
次は2代目BitLockerから。
いわゆるNT6.1カーネル→Windows 8~8.1、2012~2008R2にて実装。
暗号化モードはAES-CBCで128bit(こちらが標準)または256bitのみ。
恐らく速度を優先するために、Elephant Diffuserのサポートをしれっと切ってしまったというのが最大のポイント。標準として使用しないとしても選択肢として残すぐらいしておけば良かったのに、サポート切りってどうよ、と。
さてそれではAES-CBCの何がそんなにマズいのか。
先程も「攻撃耐性の弱さ」と書いたが、「特定の状況」では簡単に突破して解読出来てしまうのですよ、AES-CBCって。
しかもこの「特定の状況」、攻撃者は暗号化キーを知る必要が無いという。
これだけ訊くと「それじゃ暗号の意味ないじゃん」という方、ちょっと待った。
この「特定の状況」って、攻撃者は暗号化キーこそ知る必要はないものの、それ以外の状況は結構特殊なんですよ。
その特殊な状況というのは、攻撃者は暗号化キーは知らないが、最低限復号されたデータにはアクセス可能、というもの。
個人ベースで一つの環境を占有していればこういう状況には遭遇しようがないが、一方でエンタープライズ系で集中鍵管理やっていたり、家族みんなで同じ環境使ってますなんて環境だと想定しうる事態なんですな。
そのような状況では、例えば権限管理が甘いor突破されてしまうと、本来読めてはいけない筈のデータが読めたり書き換えできてしまったりする可能性があるんですわ。
これがAES-CBCの攻撃耐性の弱さなんですな。
エンタープライズでは複数のユーザーが権限を使い分けるなんて当たり前なので、こんな調子じゃとても許容し辛い。
なので実際に(ディスクの暗号化が必要な)大多数の企業では、サードパーティ製でXTS-AES等の強度の高い暗号化が出来る専用ツールが導入されていたりするんですな。
逆に言えば、個人が自分専用で使うUSBメモリのようなメディアなら、AES-CBCでも事実上十分な暗号化強度を持っていまっせ。そういう使い方ならアルゴリズムよりもキーの方の強度を心配しましょう、はい。
♯いくらAESが突破不能でも、辞書攻撃や総当たり攻撃で暗号化キーがあっさりヒットするようでは元も子もない。
◇
そして3代目BitLocker。
実装はWindows10 1511以降。WindowsServer 2016でも標準サポートしていると思われるが未確認。
最大の特徴はXTS-AESを採用したこと。
IEEEで標準化された暗号化アルゴリズムを採用することで、最近のCPUが備えるハードウェアアクセラレーションを活用してElephant Diffuser以上の難読化を高速に処理することが可能となった上、FIPS等の他の規格にも準拠し易くなったという良いことづくめ。
勿論、エンタープライズの世界でも使い物になる。
欠点はというと単純に昔の環境では見えないということぐらい。
ちなみにWindows10 1511以降でしか使用しない前提ならば、XTS-AESを使用した方がAES-CBCより処理速度が速い上、強度も高いので選択しない理由は無い。
ついでに言うとデフォルトはAES128のままだが、ハードウェアアクセラレーションが効いている環境ならAES256にしても誤差程度しか処理速度に差が出ないので、そちらに変更することをおススメ。
◆
最後に、実際の設定方法。ポリシーで設定すること可能だが、個人的にはレジストリで。
HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\FVE
EncryptionMethodWithXtsFdv [DWORD] ←固定ドライブ
EncryptionMethodWithXtsOS [DWORD] ←OS起動ドライブ
EncryptionMethodWithXtsRdv [DWORD] ←リムーバブルドライブ
1 →AES-CBC 128 /w Elephant Diffuser (Vista/7 Only)
2 →AES-CBC 256 /w Elephant Diffuser (Vista/7 Only)
3 →AES-CBC 128
4 →AES-CBC 256
5 →XTS-AES 128 (W10 1511~)
5 →XTS-AES 256 (W10 1511~)
ということになっております。
ちなみにポリシーで設定する場合の場所はここ。
グループポリシーエディタ(gpedit.msc)起動
コンピューターの構成→管理用テンプレート→Windowsコンポーネント→BitLockerドライブ暗号化
・ドライブの暗号化方法と暗号強度を選択する(Windows8、Windows Server2012、Windows8.1、Windows Server2012 R2、Windows 10 [Version 1507])
・ドライブの暗号化方法と暗号強度を選択してください(Windows 10 [Version 1511] 以降)
・ドライブの暗号化方法と暗号強度を選択する(Windows Vista、Windows Server2008、Windows7、Windows Server2008 R2)
・・・この翻訳の揺れは何。
◆
以上、本日はこんな感じで。