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:
SystemThe …
我正在阅读我即将开展的项目,该项目涉及在用Java编写的认证软件上使用笔记本电脑的TPM.
Google上发布了一些条目,但大多数条目都很老了,我不知道哪个是最好的教程.所以我想知道推荐使用的API是什么,以及从哪里获取信息的最佳位置.
谢谢.
在我的公司,我们正在开发一个由多个服务器组成的大型系统.该系统由大约5个逻辑组件组成.数据存储在XML,MS SQL和SQLite中.它是一个.Net系统(主要是),组件使用WCF进行通信,以及一些自定义UDP.客户端主要通过自定义UDP或WEB(ASP.NET和Silverlight)访问系统.
保护通信很容易,一些SSL,以及WCF上的一些安全性,我们已经完成了.
我们面临的主要问题是系统需要部署在客户的网站上,这是我们不一定信任的客户.我们需要保护服务器上的数据,以及软件本身的逆向工程.两者对我们都至关重要.
我们还需要一个kill开关,我希望根据命令销毁数据和软件,或者如果在一段时间内无法打电话回家.
我正在考虑的方向是使用TPM,或类似的东西 - 一些硬件加密解决方案,结合我们可以在内部加密服务器上的所有软件和数据的另一项服务,以便密钥来自我们的服务器安全地在我们的网站,也许TPM的记忆窗帘.
您如何建议解决这样的问题?
更新 04/02我正在寻找实用的建议,或建议可以帮助我的产品,所以我开始赏金...
看起来我们基本上把我们的机器放在客户的网站上(出于商业和实用的原因),我们拥有那台机器,客户收到他在几小时内付款的所有东西,他可以随心所欲地处理数据.但我在那台机器上运行的算法,以及存储在那里的一些数据是我们想要保护的商业机密.理想情况下,我希望机器根本不工作,甚至不启动,如果我不说它没关系,没有我的确保机器上的所有东西都保持加密状态.内存窗帘看起来也是一种在执行时保护机器的好方法.
理想情况下,我希望所有机器上的HD和存储器一旦有人用螺丝刀靠近它们就会爆炸...... :-)但我认为这样做太过分了......
更新 10/02好在做了一些研究后,我想我们将尝试与PS3加密系统相同的方向,除了我们将引入用于解密软件和来自我们服务器的数据的密钥.这样我们可以决定我们的机器是否信任服务器请求密钥,我们只需重新安装机器即可获得一个kill开关.这可能是基于TPM或类似的东西,也许是英特尔的TXT ...我也非常感兴趣的是内存窗帘作为一个重要的安全功能......
顺便说一句,我们无法通过将我们系统的有价值的部分移到我们的网站来解决这个问题,这既是因为业务需求,也是因为它在技术上不可行 - 我们需要一个巨大的带宽....
看来可信计算和机密计算都可以保护使用中的数据。
可信计算是基于TPM,机密计算是基于Intel SGX吗?
还有什么区别吗?
英特尔 PTT(英特尔平台信任技术)和 TPM 芯片在功能上是否相同?
如果我的主板带有支持 PTT 的 Intel 处理器,我是否会拥有与硬连线 TPM 芯片相同的功能,例如支持裤子等?
您如何发现特定的英特尔处理器是否支持 PTT?
我想知道是否有可能在大多数英特尔芯片中编程TPM(http://en.wikipedia.org/wiki/Trusted_Platform_Module),以这种方式:
- decide what to store in the persistent memory
- decide which cryptographic algorithms to implement.
Run Code Online (Sandbox Code Playgroud)
显然它一旦开始工作就不应该是可重新编程的(你知道这个陈述是否正确吗?).
我希望这里的大社区中的任何人都可以帮我写出我可以扩展的最简单的"可信"程序.
我正在使用Ubuntu Linux 9.04,Mario Strasser的TPM模拟器0.60(http://tpm-emulator.berlios.de/).我已经安装了模拟器和Trousers,并且在运行tpmd和tcsd守护进程后可以从tpm-tools成功运行程序.
我希望开始开发我的应用程序,但是我在编译下面的代码时遇到了问题.
#include <trousers/tss.h>
#include <trousers/trousers.h>
#include <stdio.h>
TSS_HCONTEXT hContext;
int main()
{
Tspi_Context_Create(&hContext);
Tspi_Context_Close(hContext);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
尝试编译后
g ++ tpm.cpp -o tpmexe
我收到错误
undefined reference to 'Tspi_Context_Create'
undefined reference to 'Tspi_Context_Close'
Run Code Online (Sandbox Code Playgroud)
我有什么#include成功编译它?有什么我想念的吗?我熟悉C,但对Linux/Unix编程环境并不熟悉.
ps:我是信息安全硕士课程的兼职学生.我参与编程主要是出于学术目的.
我被要求使用TPM为具有TPM芯片的x86_64设备实现许可加密狗的数量.基本上所需要的是确保为设备发布的软件只能在设备本身上运行,这样如果软件迁移到虚拟机或不同的硬件,它将拒绝运行.
我不认为该解决方案可以抵抗逆向工程,而是一种典型的"加密狗"类型解决方案,它会阻碍普通用户并使企业客户保持诚实.
我已经成功构建并包含了TPM模块,以及TrouSerS和openssl-tpm-engine代码 - 我可以成功获得TPM的所有权,但除此之外,可用的文档并不完全涵盖这个用例 - 或者如果我到目前为止一直无法找到一个简单的英语解决方案.
我希望尽可能依赖TPM中存储的私钥的秘密性质,而不是利用平台组件哈希(硬盘驱动器可能会死,CPU可能会被替换等等.我宁愿犯错客户端,以便在例行硬件升级后系统不会变得不可用.
同样,理想情况下我怀疑此解决方案可以设计为在制造过程中收集每个设备的公钥并将其添加到签名钥匙串中,以便可以针对每个设备可能存储在TPM中的单个密钥对软件进行签名,而不是要求多次签署软件?我可能会在这里弄错,但必须有一些满足平台认证方法的批量方法,否则看起来很难扩展.
我需要在Ubuntu操作系统中使用TPM芯片保护基于AD机器的证书(.cert,.pem,.key文件).
要求如下:
从AD下载到特定目录的证书需要加密或防止用户访问.
1)从Active Directory将证书下载到Ubuntu机器(使用诸如centrify之类的桥接工具)
2)使用私钥对证书进行签名,并将私钥存储在TPM芯片上(如果可用,则为libtpm engine-openssl)
3)使用签名证书和密钥配置WiFi/VPN以建立连接
需要对此主题有所了解.我能够毫无问题地执行第一步.挑战从在Ubuntu机器中使用TPM的第二步开始.
目前在ubuntu存储库中没有libengine-tpm-openssl包.并且尝试使用libtpm引擎时openssl会出错
**139927887963808:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:185:filename(/usr/lib/x86_64-linux-gnu/openssl-1.0.0/engines/libtpm.so): /usr/lib/x86_64-linux-gnu/openssl-1.0.0/engines/libtpm.so: cannot open shared object file: No such file or directory
139927887963808:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
139927887963808:error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:eng_dyn.c:450:
139927887963808:error:2606A074:engine routines:ENGINE_by_id:no such engine:eng_list.c:417:id=tpm
139927887963808:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:185:filename(libtpm.so): libtpm.so: cannot open shared object file: No such file or directory
139927887963808:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
139927887963808:error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:eng_dyn.c:450:**
Run Code Online (Sandbox Code Playgroud)
此外,即使我能够完成第二步将密钥存储在TPM中.是否可以使wpa_supplicant/openconnect vpn客户端能够读取密钥以便建立成功的连接?
tpm ×10
security ×3
encryption ×2
intel ×2
linux ×2
openssl ×2
.net ×1
c ×1
c# ×1
cryptography ×1
hardware ×1
java ×1
obfuscation ×1
sgx ×1
trusted ×1
ubuntu-14.04 ×1
uefi ×1
windows ×1
wireless ×1