How can I encrypt bytes using a machine's TPM module?
Windows provides a (relatively) simple API to encrypt a blob using the CryptProtectData
API, which we can wrap an easy to use function:
public Byte[] ProtectBytes(Byte[] plaintext)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
The details of ProtectBytes
are less important than the idea that you can use it quite easily:
System
The …
出于安全原因,希望在执行之前检查代码的完整性,避免攻击者篡改软件.所以,我的问题是
如何在Linux下签署可执行代码并仅运行可信软件?
我读过van Doom 等人的着作.,设计和实现Linux的签名可执行文件,以及Safford&Zohar 的IBM TLC(可信Linux客户端).TLC使用TPM控制器,这很好,但该文件来自2005年,我无法找到当前的替代品.
你知道其他选择吗?
更新:关于其他操作系统?OpenSolaris的?BSD家庭?
我想使用AWS Lambda代表第三方执行计算,然后向他们证明我按预期这样做了.证明将是函数体,请求和响应的加密签名摘要.理想情况下,亚马逊会使用自己的私钥对摘要进行签名,并发布其公钥以允许验证签名.这个想法类似于新的英特尔芯片通过SGX(软件保护扩展)提供的"安全区".
现有的Lambda服务具有一些所需的成分.例如,GetFunction响应包括唯一标识函数实现的CodeSha256字段.Amazon API Gateway允许您向Lambda服务发出HTTPS请求,这可能允许TLSNotary样式的请求 - 响应内容证明.但要做到这一点,我认为AWS Lambda需要直接提供签名.
Microsoft Azure正在其项目Bletchley中开发可信软件包("cryptlets"): https://github.com/Azure/azure-blockchain-projects/blob/master/bletchley/bletchley-whitepaper.md https:// github的.com /天青/天青-blockchain项目/斑点/主/布莱切利/ CryptletsDeepDive.md
当前的AWS Lambda是否可以这样?
最新的英特尔XEON处理器拥有30MB的L3内存,足以容纳薄型1管理程序.
我有兴趣了解如何在CPU中保留这样的Hypervisor,即防止被刷新到RAM,或者至少在发送到内存/磁盘之前加密数据.
假设我们使用裸机运行,我们可以使用DRTM(延迟启动)来引导它,例如我们从不受信任的内存/磁盘加载,但是如果我们可以解密()用于解密的秘密,我们只能加载真实的操作系统.操作系统,在设置了适当的规则以确保发送到RAM的任何内容都已加密后进行.
ps我知道TXT的ACEA又称ACRAM(认证代码执行区域又称认证代码RAM)据说有这样的保证(即它限制在CPU缓存中)所以我想知道是否可以在此周围做一些技巧.
pps这似乎超出了目前的研究范围,所以我实际上并不确定答案是否可行.
这与以下帖子有些相关: Perform OR on two hash output of sha1sum
我有一组 TPM 测量样本,例如以下内容:
10 1ca03ef9cca98b0a04e5b01dabe1ff825ff0280a ima 0ea26e75253dc2fda7e4210980537d035e2fb9f8 boot_aggregate
10 7f36b991f8ae94141753bcb2cf78936476d82f1d ima d0eee5a3d35f0a6912b5c6e51d00a360e859a668 /init
10 8bc0209c604fd4d3b54b6089eac786a4e0cb1fbf ima cc57839b8e5c4c58612daaf6fff48abd4bac1bd7 /init
10 d30b96ced261df085c800968fe34abe5fa0e3f4d ima 1712b5017baec2d24c8165dfc1b98168cdf6aa25 ld-linux-x86-64.so.2
Run Code Online (Sandbox Code Playgroud)
根据 TPM 规范,在上面的帖子中也提到,PCR 扩展操作是: PCR := SHA1(PCR || data),即“将 PCR 的旧值与数据连接起来,对连接后的字符串进行散列并存储PCR 中的哈希值”。此外,我发现的规范多篇论文和演示文稿提到数据是要加载的软件的散列。
但是,当我执行类似 的操作时echo H(PCR)||H(data) | sha1sum
,我没有获得正确的结果值。即,当计算(使用上述散列)时:echo 1ca03ef9cca98b0a04e5b01dabe1ff825ff0280a0ea26e75253dc2fda7e4210980537d035e2fb9f8 | sha1sum
,结果值不是7f36b991f8ae94141753bcb2cf78936476d82f1d
。
我对 TPM_Extend 操作的理解正确吗?如果是这样,为什么生成的散列与样本测量文件中的散列不同?
谢谢!/n
是否可以将大于 EPC 内存的程序加载到飞地?我觉得理论上这是允许的,因为
EEXTEND
以 256 字节增量测量飞地所以理论上,似乎可以只使用一页 EPC 内存来加载一个大程序:
我在理论上理解正确吗?虽然在实践中,我在加载大程序时立即出错。
我试图理解由TCS启用的SGX线程与SDK提供的不受信任的线程之间的区别.
如果我理解正确,TCS允许多个逻辑处理器进入同一个飞地.每个逻辑处理器都有自己的TCS,因此也有自己的入口点(OENTRY
TCS中的字段).每个线程都会运行,直到AEX发生或到达线程结束.但是,由TCS启用的这些线程无法相互同步.至少,没有用于同步的SGX指令.
然后,另一方面,SGX SDK提供了一组线程同步基元,主要是互斥和条件变量.这些原语不受信任,因为它们最终由OS提供服务.
我的问题是,这些线程同步基元是否意味着由TCS线程使用?如果是这样,这不会恶化安全吗?操作系统可以按照自己的意愿进行调度.
英特尔TXT和TPM有什么区别?与TPM相比,英特尔TXT还能提供什么?基本上,我想知道TXT是如何工作的?任何易于学习的初学者文献都将受到高度赞赏!
我想开始玩ARM TrustZone,所以我想设置一个开发环境,不幸的是我觉得我仍然缺少一些东西,我不知道如何把所有东西放在一起。
这是我现在的照片:
我知道这是一个相当广泛的问题,我很乐意获得在线资料的链接。
编辑:
我的问题的某些部分得到了部分回答,但最重要的事情还没有得到回答:我详细描述的图片是否正确和完整?是/否,为什么?
不,这不是我应该使用哪个基于 ARM 的开发板的副本?
当前的操作系统(windows,linux,BSD)是否提供驱动程序,使用户模式程序能够部分以可信执行模式执行(与计算机上运行的其他程序隔离)?如果是这样,哪里可以找到文件?
我是 TEE(可信执行环境)的新手。有人可以帮助我解决一些基本的疑问吗?
AFAIK,每个 Android 移动设备都安装了一个单独的 TEE 操作系统以及一些预定义的 TA(可信应用程序)来存储机密信息,如指纹图像、密码、密钥对等。
如何识别 Android 手机上运行的 TEE 操作系统?是否有可能在一台设备中存在多个 TEE,例如 Trusty(来自 Google)、Kinibi(来自 Trustonic)等?
由于 Trusty 来自谷歌,所以所有设备都会默认安装 Trust OS 吗?
如何列出 TEE 中现有的 TA 应用程序?如果是这样,我们可以使用 CA(使用来自谷歌的 Trusty API 的客户端应用程序)从手机连接到现有 TA吗?
security android trusted-computing trustzone trusted-execution-environment
tpm ×5
intel ×3
security ×3
linux ×2
trustzone ×2
android ×1
arm ×1
aws-lambda ×1
cpu ×1
cpu-cache ×1
encryption ×1
hypervisor ×1
linux-kernel ×1
low-level ×1
sgx ×1
sha1 ×1
soc ×1
trusted ×1
trusted-execution-environment ×1
windows ×1