Sti*_*MAN 1 c++ encryption licensing license-key
我想将机密数据存储在数字签名文件中,以便我知道其内容何时被篡改.
我最初的想法是,数据将存储在NVP(名称值对)中,使用某种CRC或其他校验和来验证内容.
我正在考虑使用ANSI C++实现这样一个文件的创建(即写入)和验证(读取).
假设这是我想要存储的数据:
//Unencrypted, raw data to be stored in file
struct PrivateInfo {
double age; weight;
FitnessScale fitness;
Location loc;
OtherStuff stuff;
};
//128-bit Encrypted Data (Payload to be stored in file)
struct EncryptedData {
// unknown fields/format ??
};
Run Code Online (Sandbox Code Playgroud)
[在我阅读了这个问题的一些回复之后]
从我迄今收到的评论来看,我担心人们会被"许可"这个词跟踪,这似乎是大多数人的一面红旗.我怀疑可能是这种情况,但在今天的安全性和普遍紧张的气氛中,我想我会更好地详述我需要"隐藏"的东西,以免有人认为我想把"Nuke密码"传递给某些人恐怖分子什么的.我现在将从我的问题中删除"许可"一词.
将其视为技术问题.想象一下,我是一名学生(我是),并且我正在尝试找出有关编码需要安全的信息的推荐(或最佳实践).
考虑到上述情况,我将重新格式化我的问题:
首先,请注意"签名"数据(通知何时被篡改)是一种完全独立且独立的操作,以"加密"数据(以防止其他人阅读).
也就是说,OpenPGP标准同时做到了.GnuPG是一种流行的实现:http://www.gnupg.org/gph/en/manual.html
基本上你需要:
但是,请注意,如果您可以比存储其余数据更安全地存储私钥,那么这只是一种用途.如果您无法保证密钥的安全性,那么GPG无法帮助您防止恶意尝试读取或篡改您的数据.任何其他加密/签名方案都不能.
忘记加密,您可能认为可以使用私钥在某个安全服务器上签名数据,然后使用公钥在某个用户的计算机上验证它.这很好,但如果用户是恶意和聪明的,那么他们可以发明新数据,使用他们自己的私钥签名,并修改代码以替换他们的公钥.然后他们的数据将被验证.因此,根据您的威胁模型,您仍然需要存储公钥以防篡改.
你可以自己实现一个等价物,类似于:
这可能会比gpg更快并且使用更少的代码:对于初学者来说,PGP是公钥加密,这比你在这里需要的要多.但滚动你自己意味着你必须做一些工作,并编写一些代码,并检查我刚刚描述的协议中没有一些愚蠢的错误.例如,如果数据不是固定长度,它有潜在的弱点,HMAC解决了这个问题.
良好的安全性避免了其他一些聪明人为你做的工作.这是一种善良的懒惰.