一种不需要密码的加密方法(用于防止网盘扫描等场景)

2022-01-12 11:28:28 +08:00
 SuperMild

安全与便利总是难以兼顾,记忆密码或管理密码,加密或解密时输入密码等操作如果能彻底免除,会非常便利,但是安全性也自然会降低。

幸好,日常生活中有些场景本身就不要求很高的安全规格,只需要稍稍加点防护就足够了。

比如上传到网盘,只要不被轻易扫描、或者万一泄露文件时让人看着一堆乱码不乐意花时间精力去解密,就足够了。

因此,我想到了把密钥直接内嵌到密文里的方法,从此不需要记忆或管理密码,因为密码就在密文里,解密时也不需要填写密码,用脚本自动化提取密码就可以解密了,方便到极致!

当然,该方法只适用于大多数普通文件,不适用于真正的机密。

听起来不靠谱?(原理)

其实很靠谱,因为:

  1. 一般人根本想不到密码就在密文里
  2. 就算想到了,也不知道具体位置
  3. 如果我把一个密钥拆成 3 段,分别镶嵌在不同位置,就更难猜了
  4. 如果我把密钥拆成 N 段,并且调换顺序后再镶嵌进密文里,你还乐意去猜吗?

而加密解密却很方便,不需要记住密码,因为程序可以自动化提取密钥。

即便如此,当然还是不适用于真正的机密,但日常大多数文件这样处理已经足够安全了。

开源脚本

不久之前我做了一个命令行工具框架,用来管理零散的脚本,这个加密脚本也是其中的一个插件。

安装框架的方法看这里: https://github.com/ahui2016/ffe/blob/main/docs/usage.md (简单来说,pip install ffe 就可以了,要求 python 3.10+)

安装了 ffe 之后,用以下命令安装这个加密解密脚本:

ffe install -i https://github.com/ahui2016/ffe/raw/main/recipes/mimi.py

如果遇到网络问题,也可以使用 gitee 地址:

ffe install -i https://gitee.com/ipelago/ffe/raw/main/recipes/mimi.py

最后安装依赖 pip install cryptography (只依赖这一个第三方库)

使用方法

可见,加密解密过程都不需要输入密码。

使用命令 ffe dump -r mimi file.txt > mimi.toml 可以生成一个 mimi.toml 文件,以后可以使用命令 ffe run -f mimi.toml 来执行相同的任务,这对于需要经常重复的操作来说是很方便的。而且,在 toml 文件里还可以添加别的任务(比如打包压缩),一次性依次执行一系列任务。

关于 ffe

ffe 是一个命令行插件框架,可以用 Python 来写插件,多个插件可组合使用,适合用来管理零散的脚本。后续我还会发帖介绍我写的插件,比如免费上传文件到云端。多个文件组合后,使用一个命令 ffe run -f <toml file> 即可一次性执行打包、加密、上传,toml 文件的编辑也很直观。

9073 次点击
所在节点    分享创造
154 条回复
SuperMild
2022-01-13 08:25:26 +08:00
@cache 你说“等效于把记一个密码变成了记一种编码方式”,

我说 “等效于把记一个复杂密码变成了记一个更简单的密码”

上面也有不少人像你一样说是编码方式,但当我问他们为什么镶嵌方式不是一个密码而是一个编码方式时,他们都不理我了,你能给我说说为什么不是变成一个更简单的密码吗?
krixaar
2022-01-13 09:04:19 +08:00
只看了标题懒得继续看内容了,之前玩过随机一个字节给文件做 XOR 然后把这个字节附到文件内容最后面的所谓“加密”,问题只是没有任何使用场景……
neptuno
2022-01-13 09:23:24 +08:00
理论上就是一种编码方式(重要的人用不到,不重要的不需要用你这方法),不过还是谢谢分享
SuperMild
2022-01-13 09:39:25 +08:00
是编码还是加密,如果只说结论不讲理由,讨论起来很无趣啊,如果能把理由说出来,是不是更有意义呢?

我先说说我的理由:编码的特征很明显,一对一、一对多、或者多对一,并且通常以一对一映射为主,一个单词编码后就总是一样的字符。同一个文件编码后,通常结果是固定不变的。

如果拿到 10 个采用同一种编码方式处理过的文件,对照着看就很容易看出“有规律”(不是看出规律的具体细节)。

但如果是加密,采用流行的安全的流程处理后,对同一个文件加密也可以让每次加密后的结果都是不一样的无规律的。如果拿到 10 个采用同一种加密算法处理过的文件,对照着看也毫无规律。

而我的这个加密方式,一个破解者拿到一堆加密后的文件对照着看,是看不出有规律的,因此这个破解者会认为这是加密,不是编码。
cache
2022-01-13 09:43:26 +08:00
现代密码学的一个巨大进步就是公开加密算法,所有秘密保存在秘钥上

而你这种方式,密文里包含了秘钥,所有秘密都在加密方式上,那就是一种只依赖于固定算法的编码方式。

这就好比你家大门用了一把非常高级的锁,但你把钥匙藏在门口的地毯下面,那我们讨论安全性的时候跟你用什么锁是没关系的,就是一个藏钥匙的技巧。

另外你为什么觉得这是一种更简单的密码?
记这么一套解密方式,也不会比记一个 4 位数密码更简单吧?而且你这一开源,变成所有用户共享一个密码,最基本的安全性都没了
SuperMild
2022-01-13 09:46:16 +08:00
我再换一个角度讲,如果只是简单地把密码写在文件名里,用文件名作为密码用 AES 加密一个文件,那是加密,不是编码,这应该没有异议吧?

现在我把密码,以明文方式直接连接在密文开头,这与写在文件名没有本质差别吧?还是加密。

那我再把密码插在密文中间,为什么就那么多人说是编码,不是加密了呢?
SuperMild
2022-01-13 09:51:36 +08:00
@cache 把钥匙藏在门口的地毯下面,当然毫无安全性可言。

但我做的是把钥匙截断几块,每一块看起来就是一块普通的石头,混进门前的石头堆里。

这安全性就比直接放在地毯下高很多,而且就算公开了方法,用户也可以通过改变石头堆里的摆放位置,从而避免共享密码。

一个 4 数的密码,被破解软件秒破;但我这个方法,用流行的破解软件去暴力破解是绝无可能破解的,因为破解者拿到的都不是真正的密文(里面混了密钥)。
SuperMild
2022-01-13 09:58:21 +08:00
@cache 我现在只需要记住:密钥在密文的第 15 个字符起算,取出密钥后把密钥的前 15 个字符放到末尾。

我觉得记这个很容易,并且我不需要记得很清晰,就算记不清第 15 还是第 14 ,我也能轻松试出来,密钥永远和密文在一起,这让我很安心。而破解者由于不知道密钥就在里面,也毫无头绪如何排列,因此破解很难(选对破解方向就很难)。

而简单密码很容易被破解,常用密码又容易被牵连,如果复杂不常用的密码,又需要管理。

而且我也知道、并且也强调声明多次,不适用于真正的机密,主要用于防网盘扫描。故意降低了安全性(但还是比简单密码更安全),获得了便利性。
fregie
2022-01-13 10:03:45 +08:00
@SuperMild 请你首先定义加密和编码的区别。
如果一种加密的密钥始终是固定的不能修改,那么这能称之为加密吗?和编码又有什么本质区别?
"知道**密码**没办法解码”
问题是你把密码已经写进内容里了,怎么会不知道?只是**人**没意识到罢了,或者说还没因为不知道编码方式所以不知道密码。
bung
2022-01-13 10:14:27 +08:00
一种自定义的文件格式。。。
evgm
2022-01-13 10:16:12 +08:00
只有一台电脑的话,可以根据硬件生成个电脑指纹做密码,然后用脚本自动加密解密
SuperMild
2022-01-13 10:18:45 +08:00
@fregie 如果用文件名做密码,或者把密码写着文件名里,然后用公认的加密算法来加密这个文件,这是加密,没有异议吧?

现在我把密码,以明文方式直接连接在密文开头,这与写在文件名没有本质差别,还是加密。

那我再把密码插在密文中间,应该还是加密才对啊。

加密与编码的区别,我的看法在大概 104 楼那里写了。
SuperMild
2022-01-13 10:20:10 +08:00
@evgm 就算只有一台笔记本,也会担心烧了主板或者被盗、或者进水。(我就试过烧主板)
SuperMild
2022-01-13 10:33:05 +08:00
如果我用公认加密算法加密一个文件,然后把密码写在文件名,并且花钱全网做广告告诉大家密码就是 123 ,那么这个文件虽然密码公开了,虽然密码很简单,但还是归类为加密,不能归类为编码吧?

那我改成告诉大家密码在密文里,为什么就变成编码了呢?
SuperMild
2022-01-13 10:34:35 +08:00
只要密码可以轻易获取,那么一个加密算法就会变成一个编码算法…… 这个说法我不同意。
glfpes
2022-01-13 10:46:24 +08:00
写了一个脱裤子放屁的东西,被人指出来就嘴硬。
fregie
2022-01-13 11:03:16 +08:00
"用文件名做密码,或者把密码写着文件名里,然后用公认的加密算法来加密这个文件"
这不是加密啊!加密无非也是用密钥加上一定算法编码正文而已,当你的密钥是固定公开的,何来加密?
SuperMild
2022-01-13 11:10:21 +08:00
@glfpes 我也没有逼着别人认同我的说法吧?我的态度很开放,大家各自讲讲自己的理由,别人可以指出我的问题,我也有权反驳,有来有往友善讨论,为什么你说话语气不善呢?


@fregie 你说“密钥是固定公开的,就不算加密”

那我就继续问一个场景,如果我宣布密码可能是我的生日、也可能是我的电话号码,也可能是 123 abc 之类的简单密码,这种情况下,密钥不是固定的,那你认为算不算加密呢?

(我假设这个场景,是因为我的镶嵌方式是可以有很多种变化的)
kirisamemarisas
2022-01-13 11:12:25 +08:00
这个算法的保证安全的要点是“密码的位置及其组合规律”。找规律这种问题最大的弊端在于给予的样本数,当样本数充分大的时候,对于机器来说,寻找到规律应该是不难的(这块应该要结合深度学习那块?层主不熟悉那方面的技术。)。
当样本为数为 1 的时候,退化为暴力破解加密文件,当样本数足够多时,转化为深度学习的一种找规律课题。
glfpes
2022-01-13 11:12:32 +08:00
@SuperMild 就是不肯承认这玩意就是编码,那可不是嘴硬么?

挺中肯的评价,语气哪里不善?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/827768

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX