# 安全与文件保险箱

使得OpenCore与众不同的正是其内在的安全性，所以下面我们来一起体验和设置OpenCore的这些安全性的特点：

* [FileVault](https://rmtt.gitbook.io/opencore-vanilla-guide/an-zhuang-hou-de-wan-shan-gong-zuo/an-quan-yu-wen-jian-bao-xian-xiang#filevault)
* [Vault](https://rmtt.gitbook.io/opencore-vanilla-guide/an-zhuang-hou-de-wan-shan-gong-zuo/an-quan-yu-wen-jian-bao-xian-xiang#vault)
* [ScanPolicy](https://rmtt.gitbook.io/opencore-vanilla-guide/an-zhuang-hou-de-wan-shan-gong-zuo/an-quan-yu-wen-jian-bao-xian-xiang#scanpolicy)

## FileVault

FileVault是macOS的内置驱动器加密，OpenCore的支持使得FileVault相对于Clover有了巨大的改进。

开始前，你需要先放入如下 `.efi`驱动：

* FwRuntimeServices.efi
* 对于不支持UEFI的主板，还需要加入 [AppleUsbKbDxe.efi](https://github.com/acidanthera/AppleSupportPkg/releases)&#x20;

不要在OpenCore中使用 **VirtualSMC.efi**，因为已经集成到了OC中(OC 0.5.5开始)。

在你的 config.plist中进行如下设置：

* Misc -> Boot&#x20;
  * `PollAppleHotKeys` 设置成 YES
* Misc -> Security
  * `AuthRestart` 设置成YES(可选，开启后FileVault2的Authenticated restart可以不需要密码)
* NVRAM -> Add -> 4D1EDE05-38C7-4A6A-9CC6-4BCCA8B38C14
  * `UIScale` 设置成 `02` ，为了防止在高分屏中，OC的UI太小
* UEFI -> Input
  * `KeySupport`设置成 YES(在需要使用OC内置的输入使用，如果用了UsbKbdxe则不需要开启)
* UEFI -> Protocols
  * `FirmwareVolume` 设置成 YES
  * 对于Haswell以及更老的CPU芯片架构(包括X99)需要开启`HashServices` ，对于出现SHA-1错误的一些系统也需要开启此项
  * `AppleSmcIo` 设置为YES(用于替换 VirtualSMC.efi)
* UEFI -> Quirks
  * `ProvideConsoleGOP` 设置为 YES
  * `RequestBootVarRouting` 设置为 YES
  * &#x20;如果遇到了 `Still waiting for root device` ，则需要将`ExitBootServicesDelay` 设置为 `5`

上面的工作都做完后，就可以在设置中开启FileVault了。

## Vault

### 什么是vaulting(保险箱)?

保险箱是关于两样东西的，vault.plist 和vault.sig:

* vault.plist: EFI的一个快照
* vault.sig: 用于验证vault.plist

也可以看成是OpenCore的安全启动，在没有你的授权的情况下，任何人都无法改动

Vaulting的详细内容是vault.plist的一个256字节的RAS-2048密钥(或者说Hash)，改内容会放进你的opencore.efi。这个密钥可以在编译之前写入 [OpenCoreVault.c](https://github.com/acidanthera/OpenCorePkg/blob/master/Platform/OpenCore/OpenCoreVault.c) ，但是你如果是用的已经编译好的opencore.efi，则可以使用`sign.command`来完成。

注意 nvram.plist 不会被装进保险箱，也就是说其他人任然可以修改你的NVRAM变量。

设置你的 config.plist：

* 开启`Misc -> Security -> RequireSignature`
* 开启`Misc -> Security -> RequireVault`

设置vault：

下载OpenCorePkg 然后打开`CreateVault`文件夹，然后你会发现：

* `create_vault.sh`
* `RsaTool`
* `sign.command`

最后一个就是我们关心的 `sign.command`

当我们运行这个命令的时候，它会在Utilities的同级目录寻找EFI文件夹，所以我们可以把EFI文件夹放到OpenCorePkg 文件夹中或者把Utilities 放到EFI文件夹中。

![](https://3071716659-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0CTMfCo6pHY1I2RKSi%2F-M0D-TizV3NYriOR3VH1%2F-M0D0DG_K_NVCWqiTMAz%2FScreen_Shot_2020-02-01_at_7.07.28_PM.png?alt=media\&token=e72ada29-b768-4cac-ad77-b225a8fce565)

现在就可以准备执行`sign.command`:

![](https://3071716659-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M0CTMfCo6pHY1I2RKSi%2F-M0D1iicP40RwVccXP-U%2F-M0D3fPaEC4cMXgisfZ5%2FScreen_Shot_2020-02-01_at_7.05.29_PM.png?alt=media\&token=0425f47a-0598-47c4-85d1-cee74116ff65)

### 设置vault后如何关闭

如果使用过程中遇到了问题或者只是想要关掉vault，主要需要做如下设置：

* 获得一个新的OpenCore.efi
* 关闭`Misc -> Security -> RequireSignature`&#x20;
* 关闭`Misc -> Security -> RequireVault`&#x20;

## ScanPolicy

这个设置是用于阻止扫描未信任的来源或者从其中启动，设置为0可以扫描所有可启动的设备，但是使用更精确的值会更好。

为了计算ScanPolicy的值，你需要做一点简单的16进制加法，计算完成后将其转换为10进制然后填进去即可，使用macOS的自带的计算器便可以计算，而且很方便。

* `0x00000001 (bit 0)` — OC\_SCAN\_FILE\_SYSTEM\_LOCK
  * 只扫描已知的文件系统，这一项不影响dmg文件的挂载。已知的文件系统通OC—*SCAN\_ALLOW\_FS来配置*
* `0x00000002 (bit 1)` — OC\_SCAN\_DEVICE\_LOCK
  * 只扫描已知的设备，已知的设置通过OC\_*SCAN\_ALLOW\_DEVICE配置*
* `0x00000100 (bit 8)` — OC\_SCAN\_ALLOW\_FS\_APFS
  * 允许扫描 APFS 文件系统
* `0x00000200 (bit 9)` — OC\_SCAN\_ALLOW\_FS\_HFS
  * 允许扫描 HFS 文件系统
* `0x00000400 (bit 10)` — OC\_SCAN\_ALLOW\_FS\_ESP
  * 允许扫描 EFI系统分区
* `0x00010000 (bit 16)` — OC\_SCAN\_ALLOW\_DEVICE\_SATA
  * 允许扫描 SATA 设备
* `0x00020000 (bit 17)` — OC\_SCAN\_ALLOW\_DEVICE\_SASEX
  * 允许扫描 SAS 和Mac NVMe 设备
* `0x00040000 (bit 18)` — OC\_SCAN\_ALLOW\_DEVICE\_SCSI
  * 允许扫描 SCSI 设备
* `0x00080000 (bit 19)` — OC\_SCAN\_ALLOW\_DEVICE\_NVME
  * 允许扫描 NVMe 设备
* `0x00100000 (bit 20)` — OC\_SCAN\_ALLOW\_DEVICE\_ATAPI
  * 允许扫描 CD/DVD 设备
* `0x00200000 (bit 21)` — OC\_SCAN\_ALLOW\_DEVICE\_USB
  * 允许扫描 USB 设备
* `0x00400000 (bit 22)` - OC\_SCAN\_ALLOW\_DEVICE\_FIREWIRE
  * 允许扫描 FireWire 设备
* `0x00800000 (bit 23)` — OC\_SCAN\_ALLOW\_DEVICE\_SDCARD
  * 允许扫描 读卡器设备

默认的情况下，ScanPolicy的值是`0xF0103`(983,299) ，也就是下面几个值的和：

* OC\_SCAN\_FILE\_SYSTEM\_LOCK&#x20;
* OC\_SCAN\_DEVICE\_LOCK
* OC\_SCAN\_ALLOW\_FS\_APFS
* OC\_SCAN\_ALLOW\_DEVICE\_SATA&#x20;
* OC\_SCAN\_ALLOW\_DEVICE\_SASEX&#x20;
* OC\_SCAN\_ALLOW\_DEVICE\_SCSI&#x20;
* OC\_SCAN\_ALLOW\_DEVICE\_NVME

这里给出一个简单的例子，比如你想要添加OC\_SCAN\_ALLOW\_DEVICE\_USB，也就是允许扫描USB设备：

`0x00200000` + `0xF0103` = `0x2F0103`

然后转换为10进制就是`3,080,451`
