基本上,这是一种算法,它以这种方式确定性和可逆性地弄乱字符串反转算法需要整个混乱的字符串。
是否存在这样的事情?如果是这样,我应该使用哪些搜索词来了解更多信息?我对这个主题的了解不足,无法知道正确的单词来查找更多信息。
#1 楼
澄清性我想知道是否存在一种编码/散列/加密方案,在给定整个编码/散列/加密字符串的情况下,始终可以完整地导出原始字符串,而没有其他(无键/密码)。但同样,给定编码/哈希/加密字符串的任何部分都不能导出原始字符串的任何部分。
我假设“原始字符串的任何部分都不能导出给定已编码/哈希/加密的字符串的任何部分”的意思是“如果给定的值小于整个已编码/哈希/加密的字符串的任何部分,则不能导出原始字符串的任何部分”,否则问题将是自相矛盾的。
答案
听起来好像您正在寻找一种排列。排列是对固定大小的块集的可逆转换。如果输入较大,则“全有或全无”转换可能会有用。 @DannyNiu提到的OAEP是AONT的示例。例如,许多分组密码是通过对置换应用程序进行交织并添加密钥材料而构建的。排列提供扩散,这确保了如果您修改输出的任何部分然后尝试对其进行反转,则最终会得到完全不同的输入。
如果仅从分组密码中剥离密钥加法部分,它也应该满足您的要求。例如,AES由subBytes,mixColumns,shiftRows和addRoundKey组成。如果要省略addRoundkey操作,将留下一个固定的排列,该排列提供所需的雪崩效果和某种程度的不可预测性。排列的另一个示例是keccak-f,它为SHA3算法进行混合。
无密钥排列不提供加密
请注意,没有密钥的这种构造不再提供加密,因为没有某种保密性(密钥提供的保密性)就不可能提供消息的机密性。如果具有输入消息的任何人都可以计算输出“密文”,或者具有输出“密文”的任何人都可以将其转换为输入消息,那么显然无法实现输入的机密性。
您用“编码”标记了这个问题,因此在您的用例中可能不需要保密。您将需要确定此构造的用途以及是否存在问题。
评论
$ \ begingroup $
听起来完全像是一个全有或全无的转换。
$ \ endgroup $
–user253751
18年3月23日在5:10
$ \ begingroup $
AONT显然是您要寻找的问题。我认为您应该领导它。
$ \ endgroup $
–otus
18年3月24日在9:54
$ \ begingroup $
@otus我可以做到,但是我不确定问题是否如此明确,考虑到像这样的评论并回答所有都暗示着不同的事情,看来很多人对这个问题有不同的解释。询问者正在寻找。
$ \ endgroup $
–艾拉·罗斯(Ella Rose)
18年3月24日在15:01
$ \ begingroup $
好的,也许不是“很明显”,但这是最正确的。现在+1
$ \ endgroup $
–otus
18年3月24日在15:05
#2 楼
秘密共享可能是要考虑的另一种选择。它允许您获取一个值,将其任意细分为多个部分,并且拥有这些部分的子集(而不是整个集合)使得无法重建原始值。这可以通过多种方式完成,其中最简单的方式是与附加机密共享有关。给定一个秘密值$ x $,可以通过选择$ m-1 $个随机值并将其分配给$$ \ forall i \ in \ {1, \ dots,m-1 \},[x] _N ^ {P_i} \ in_RZ_N $$最后的份额满足等式$$ [x] _N ^ {P_m} =(x- \ sum_ {i = 1} ^ {m-1} [x] _N ^ {P_i})\ mod N $$
这样,每个共享都是统一随机的,并且在信息论的意义上是安全的。此外,这最多可以拥有一个拥有$ m-1 $数量的子集的个人。只有拥有所有$ m $的股份,才可以重建原始秘密,并且这种保留不考虑计算能力的假设或限制。如果某人确实拥有所有$ m $股,那么由于以下原因,重构秘密非常容易:
$$ x =(\ sum_ {i = 1} ^ {m} [x] _N ^ {P_i})\ mod N $$
评论
$ \ begingroup $
实际上,我认为OP真正需要的是选择一个随机密钥,用它加密他的文本,然后将加密的文本以及秘密密钥的一部分分发给他的N个参与者。
$ \ endgroup $
–马丁·邦纳(Martin Bonner)支持莫妮卡(Monica)
18年3月22日在11:10
$ \ begingroup $
OP还应该意识到,可以安排事物,这样,如果合并了N股中的任何k股,就可以对秘密进行解码。实际上,可以构建任意复杂的系统(例如:必须合并至少六个份额,但是每个部门至少必须有两个份额,除了审计必须由至少一个份额代表之外)
$ \ endgroup $
–马丁·邦纳(Martin Bonner)支持莫妮卡(Monica)
18 Mar 22 '18 at 11:14
$ \ begingroup $
op可以多次加密并分发密钥。只有所有密钥都可以解密事物。
$ \ endgroup $
–akostadinov
18-3-22在13:04
$ \ begingroup $
马丁·邦纳(Martin Bonner),在附加机密共享下不可能有低于全部股份的门槛。当然,这是沙米尔的计划,但这不是我在讨论的。
$ \ endgroup $
–肯·高斯
18-3-23的3:16
$ \ begingroup $
考虑到OP写道:“我对主题不了解足够多,无法知道用来提出问题的正确单词,所以Shamir的秘密共享可能正是OP真正想要的。”
$ \ endgroup $
–通配符
18-3-23在3:42
#3 楼
OAEP-最佳的非对称加密填充可能就是您想要的。在RSA公钥加密系统中,为了防止部分解密,使用OAEP填充。本质上,这是带有随机元素的Feistel网络。
单独使用时,它可以确保任何部分信息都不能衍生出部分信息,但是当整个消息可用时,它就变得微不足道了。
就您而言,这不再是加密-它是秘密共享。
相关链接
#4 楼
使用常见算法实现此目的的简单方法是执行以下操作:选择随机密钥(密钥)
使用随机密钥(encrData)加密数据
哈希加密的数据(encrHash)
Xor密钥和哈希(xorKey)
结果数据将是加密的数据+ Xor密钥(encrData + xorKey)
进行反向操作:
将数据拆分为encrData + xorKey
将加密的数据(encrHash)哈希化
将xorKey与encrHash进行异或运算,因为xor的工作方式这会逆转上面的过程(密钥)。
使用密钥解密数据
如果需要,使用base64加密的数据以生成字符串形式
使用此方案,您将需要整个字符串可以解密数据,并且可以使用任何安全算法(例如AES和SHA256)
评论
$ \ begingroup $
如果我们只是选择将消息的前512位作为“密钥”,而不是选择一个随机密钥,这仍然有多安全?
$ \ endgroup $
–leftaround关于
18-3-22在22:24
$ \ begingroup $
@leftaroundabout肯定会削弱此方法。话虽如此,该方法本身并不安全,因为解密密钥已随消息一起提供。
$ \ endgroup $
–网络唤醒
18 Mar 23 '18 at 13:18
$ \ begingroup $
左右,如果您想进行收敛加密(相同的文本始终返回相同的输出),则可以使用解密数据的哈希并将其用作加密密钥。
$ \ endgroup $
–网络唤醒
18 Mar 23 '18 at 13:19
$ \ begingroup $
@leftaroundabout如果您使用消息的前512位作为密钥,那么对手也可以解密他们拥有的消息的任何部分,只要它们也具有前512位,即使它们缺少其他消息的一部分。
$ \ endgroup $
–巨石
18-3-23在20:26
$ \ begingroup $
@AgentME这512位将永远不会以明文形式发送,仅与消息其余部分的哈希值进行异或处理。
$ \ endgroup $
–leftaround关于
18 Mar 23 '18 at 21:08
#5 楼
“密钥”是用于以已知“算法”加密的秘密数据。当然,您可以制作无密钥算法-进行置换,四处移动,位反转等。使用任何内置值的已知强加密。混合搭配您想要的一切!但是,这有效地使算法本身成为关键。一旦有人可以访问您的加密器/解密器和/或任何内置值,他们就无需知道任何其他数据(这是单独密钥的全部原因),并且可以解密他们想要的任何内容。顺便说一下,这是徒劳的DRM尝试失败的主要和必然点。
评论
$ \ begingroup $
万一您缺少术语,就是在谈论AES或其他分组密码的白盒加密。
$ \ endgroup $
– Artjom B.
18 Mar 23 '18 at 22:52
#6 楼
一次性填充它鉴于以下条件...
爱丽丝有纯文本。她想加密它。
加密后,爱丽丝获得了多个密文。
爱丽丝(Alice)希望将密码文本提供给没有权限阅读纯文本的人员。他们中的任何一个都不能自行解密密文。
如果所有拥有密文的人都将其交给爱丽丝,爱丽丝必须能够重建纯文本。
这很容易:使用一次性填充板。
Alice创建的密钥(K1)与纯文本长度相同。
爱丽丝对纯文本和密钥进行XOR,得到C1。
爱丽丝将K1分配给鲍勃,将C1分配给卡罗尔。
除非Bob和Carol陷入困境,否则任何人都无法重建消息。当两者都将密钥和密文返回给Alice时,Alice只需要对它们进行XOR运算就可以将纯文本返回。
扩展
Alice希望获得更好的安全性,并要求Dave和Erin参与其中。该算法变为:
Alice创建一个与明文长度相同的密钥(K1)。
Alice对明文与K1进行异或运算,得到C1。
爱丽丝将K1给鲍勃。
爱丽丝重复1、2和3,在C1上应用K2,然后得到C2。她将K2给了Carol。
爱丽丝重复5,得到K3和C3。她将K3交给Dave。
Alice将C3交给Erin。
可以重复多次,只要Alice喜欢。
这有点脆弱。爱丽丝必须先从所有人那里获取密钥/密码,然后才能让她获得纯文本。但这是另一个帖子的问题。
评论
$ \ begingroup $
您有错误的情况。爱丽丝并不担心夏娃。她实际上是想将加密的消息的一部分提供给Bob和Charlie(可能还有其他人),并且让他们所有人都能够读取加密的消息,但前提是他们都必须合并消息的各个部分。 @webwake的答案显示了如何执行此操作。
$ \ endgroup $
–马丁·邦纳(Martin Bonner)支持莫妮卡(Monica)
18-3-23在14:04
$ \ begingroup $
@MartinBonner发表评论后进行了重写。
$ \ endgroup $
– MichaelK
18 Mar 23 '18 at 14:36
#7 楼
我相信可以实现这一点,但是当然您需要同时保护加密和解密算法。将其隐藏在具有其余端点的非常安全的服务器上,在该端点上需要进行身份验证才能使用其余服务。因此,要使用该算法,您需要将经过身份验证的请求发送到安全端点。也不要忘记混淆您的生产代码。如果您不熟悉编写加密算法,则可以通过学习简单的表转换编码开始,以开始使用。
您的钥匙将是数学,并使用强大的伪随机数生成器。因此,如果将所有结果存储在数据库中,请确保使用加密,而不是纯编码,否则将很容易破解。
为什么不尝试同时创建随机数生成器呢?如果您可以计算sqrt(2)或Pi的n ^ x十进制数或一些无理数,则可以创建自己的偏差以生成强的非标准prn。
如果您认为加密足够强大,请尝试提供x个纯值和加密值的样本,以查看是否有人可以破解它们。
最后,不要对任何我所说的只是个菜鸟,凭空想象我知道我不知道的东西,我做其他事情为生。
评论
$ \ begingroup $
如果您的算法是秘密的,那么它不是无钥的-您的算法是关键。 (这被称为“隐秘的安全性”,自1883年以来,密码设计者就一直认为缺点是设计原则。)
$ \ endgroup $
–吱吱作响的s骨
19-10-26在19:26
$ \ begingroup $
不错的Wiki文章,谢谢:)正如我所说的,我是菜鸟,这是一个很好的说明!我想我天生就喜欢默默无闻,但是我明白为什么不建议在任何情况下都不能妥协的事物。
$ \ endgroup $
–Paal Pedersen
19-10-26在19:44
#8 楼
让我们以最简单的密码为例:ROT13。您用字母后的第13个字母替换一个字母。由于字母表中有26个字母,因此您无需逆转解密算法。 ROT13是无密钥加密的一个例子,当然是一个很弱的例子吗?不,因为13是您的钥匙。我不认为任何可以用计算机表达的算法都是无密钥的。另一个密钥不明显的奇怪例子是语言。晦涩的语言已被用作加密形式。最著名的例子是第二次世界大战的代言人。 Navajo当时是一门不成文的语言,加密消息的唯一方法是使用您的语言能力和嘴巴。您使用耳朵,语言能力和笔和纸对消息进行了解密。那么这种加密形式是无密钥的吗?要回答这个问题,我们必须知道该算法是否可以由计算机表示。目前尚无法使用计算机将英语翻译成Navajo,但是有些服务可以将英语翻译成中文,反之亦然。如果我们训练了一种语言模型,该模型可以使用计算机自动将英语翻译成Navajo,那么该模型就是您的钥匙。
因此,此答案不能最终排除可能存在的任何形式的无密钥加密。我只是看了一些RFC或NIST未涵盖的加密主题,而且我认为无键加密不可能存在。
评论
$ \ begingroup $
我认为您误解了OP试图执行的操作。
$ \ endgroup $
–马丁·邦纳(Martin Bonner)支持莫妮卡(Monica)
18 Mar 23 '18 at 14:06
评论
不太可能。假设您有一个“混乱的字符串”,缺少一个字符。在这种情况下,对手可以猜测/蛮力角色。但是也许在这样的情况下,至少有128位信息必须丢失。例如,您对字符串进行加密,然后将密钥放在末尾,然后对密文进行哈希处理,然后将其与密钥进行异或。是的,仍然可以满足我的实际要求。我正在想象长度相当大的字符串,并将“混乱的字符串”分成至少3个块,然后将其分发给不受信任的各方进行存储,以便任何一方都无法重构原始消息的任何部分,除非他们知道哪些块在一起,以什么顺序排列。
天哪,我希望我不仅仅是在凌晨2点发明一种加密方案,而是下床:P注意,这种事情通常是由秘密共享方案完成的。
出于好奇,您为什么要这样做?
就在这里。压缩。特别是非常非常有效的压缩。以zip为例。继续,压缩文件。然后在十六进制编辑器中将其打开,并在文件中间更改ONE BYTE。解压缩它,您会得到垃圾。