利用 github id 加密隐私数据(测试送 100 元红包)

319 天前
 ysmood

git 仓库: link

如果你感兴趣的话,也可以在本帖子里留加密信息给我玩:

echo '你的微信 id' | whisper -b -e @ysmood

如果超过 10 个人留了微信账户,就随机给一个人送 100 元红包。

用法 01

比如 hr 想在某个帖子分享自己的邮箱给贴主,贴主的 github id 是 jack:

echo 'hr@mail.com' | whisper -b -e @jack

解密:

echo 'AQABATIhJwkBASD4gfrf' | whisper -b

这样就只有贴主能看到邮箱了,不会泄露自己的隐私了。

用法 02

比如想在 github issue 上分享自一些敏感的调试数据给 repo 的开发者用于复现某种 bug ,假设 repo 的开发者 github id 是 jack:

whisper -e @jack 截图.jpg > 加密.jpg

这样的话就只有 jack 本人可以看到这个截图了。

用法 03

再比如用来在 Github 仓库中与团队成员共享数据库密码,只要成员能克隆仓库,就无需生成新的密钥对或进行额外的任何配置,零门槛。

比如, 想共享 .env 文件给 Jack 和 Time ,他们的 github id 是 jacktim:

whisper -e=@jack -e=@tim .env > .env.encrypted

commit .env.encrypted 到 git 仓库.

Jack 就可以 clone 仓库然后解密:

whisper .env.encrypted > .env

关于 Whisper 和 Age 的对比: link

3644 次点击
所在节点    分享创造
34 条回复
geelaw
319 天前
随便看了几眼,看起来有如下问题:

- 弄混了 AES 块长度和密钥长度,并且不知为何要先对随机数取 MD5 再当作 AES 密钥
- 加密算法看起来没有保证选择密文攻击下的安全性
- 引用 RFC 4880 Sect. 5.13 以论证合理性的部分似乎没有起到密码学安全性(所引用段落的目的)的作用
superkkk
319 天前
为何不直接在帖子里留下自己的 rsa 公钥。这样其他人加密后的信息只有有私钥的人才知道。
kindjeff
319 天前
是用用户 github 的公开公钥加密数据吗,还挺有意思的
Masoud2023
319 天前
真有这种需求建议老老实实 GPG
ysmood
319 天前
@geelaw 多谢指教!

> - 弄混了 AES 块长度和密钥长度,并且不知为何要先对随机数取 MD5 再当作 AES 密钥

你可以读读 golang 的文档 https://pkg.go.dev/crypto/aes#NewCipher 这里并没有弄混,是为了选择块长度才做 md5 的,保证不论使用什么长度的 secret ,块长度都是 128bit 。请问这有啥安全问题吗?

> 加密算法看起来没有保证选择密文攻击下的安全性

这个只有非常限定的情况下才能发生,而且只发生在 rsa 上,加个 khdf 就好了。现在都只推荐使用 ecdsa 或者 ed215519 了,rsa 不推荐使用。我有时间修复下。

> 引用 RFC 4880 Sect. 5.13 以论证合理性的部分似乎没有起到密码学安全性(所引用段落的目的)的作用

这个不是为了安全设计的,是为了快速验证密码是否正确。因为 AES 任意密码都可以 decode 内容,即便是密码错误也可以 decode ,不过会 decode 成无意义的数据。
galenzhao
319 天前
不错 ,相当于用 github 来获取分发的公钥,
不过像我这个有一堆公钥在的 ,不太好整
ysmood
319 天前
@superkkk 当然可以,whisper 其实就是在为你做这个事情,只是更便利了而已。
ysmood
319 天前
@Masoud2023 你看看 age 库,用的人还是非常多的,证明还是有很多人不太想在某些场景下使用 gpg 的。
ysmood
319 天前
@galenzhao

> 不过像我这个有一堆公钥在的 ,不太好整

whisper 已经解决这个问题了,它可以自动选择密匙,也支持公钥过滤。原理在于它 embed 了 公钥的 hash 到加密后的内容,你可以试试。

比如这是用你的第三个公钥加密的信息,你直接可以用 whisper 解密,不需要任何配置:

echo 'hi' | whisper -b -e @galenzhao:IfQaAz

AQABAba9zT8BAYAD0JJoTb40bb5vxJshk9cU9p8EzsqDpnGMcEnbAE2ppJjoXsZcLyyiEuhb96G4yDCiU5CCOWPUANLxWK2ZMzWxc+y5Sa0XIy44Z/kEdu+OhZ+sYDuzhHAF1Bptjof5eFRDAx08Tl63en15/SDHB3WeGiQZhCTlgz44wUPZ6qcD5mvJhkgjpDlvAwZuUTuRxlDrEvAGjo03DTlu1xqUk8HhU2TtrzI4Zt86ymNc/JNtd8MQ8qi6FVanGIQATUZ7URJH3i22NmCN6NKek28iXCrOgtva53scJHuDbkfYrkEJBJl7WOdiHeX8jbvR/0Y3oJML6/kFgdYwi6t93zYwwIsKaT9hYHsxh0EvPODn9E9lHyYN142TwhnUllz8vd+dIR53YEXJfYjhoStpbVrpQ5SQHswRlc5F/kV5FiKWMKKTggRRk5FNEPIycuyAQiGyqPT4HVZrCFOOgxPcDxYWbsskHaZAy4zUxHRfpvAVRfgza+m5sQHQUpn6TiE5Q+ucf6d5+AEWbCxMuWSyJ8qwMSQlbs9K/v14
ysmood
319 天前
@geelaw 我看了下 golang 的 rsa.EncryptOAEP 感觉也足够安全了,不太需要再做额外的优化了。
ysmood
319 天前
@geelaw 要说 whisper 代码里最有争议的地方,应该是 ed25519 转 ecdsa 的安全性问题。目前没有太好的办法,推荐加密还是用 ecdsa 比较好,ed25519 只用于签名。

https://github.com/ysmood/whisper/blob/0e43607cd36c869bdaa9a03f63701eb5603ffec3/lib/secure/key.go#L267

要是能帮忙把这个问题解决了那就厉害了。
galenzhao
319 天前
@ysmood 我的意思是,一堆公钥,但是对应的每个私钥都在不同的机器,
如果想要都能 decode ,那就得把用户所有公钥都搞一份数据,数据量大的话就不好整了,
ysmood
319 天前
@galenzhao 很容易呀,那你就把第 1 个公式当成通用的公式呗,只需要把它的密钥拷贝到所有的机器上就够了。

就相当于你每台机子都要登微信才能用微信一样的道理,你至少要有一个密钥是所有的电脑上才都有的你才能方便别人给你发私信,不管你用什么工具都是一样的。
ysmood
319 天前
抱歉订正下:公钥,不是公式
equationzhao
319 天前
Enter passphrase for private key: Error: inappropriate ioctl for device

是不支持输入 passphrase 吗
equationzhao
319 天前
@equationzhao terminal 是 warp 和 mac 自带的 terminal
ysmood
319 天前
@equationzhao 我试了下 warp 我也是 mac ,没有任何问题,可以正常输入 passphrase ,你用的是 zsh 吗?

可以通过

echo $0

来看用的什么 shell 。
lambdaq
319 天前
@kindjeff 估计是。。LZ 的公钥是 https://api.github.com/users/ysmood/keys
InDom
319 天前
得到一个有用的东西,https://github.com/{YOUR_ID}.keys

感谢楼主。
Senorsen
319 天前
挺有意思的思路,不过 ls 提到的选择哪个 ssh 密钥确实也是个问题

AgABATIhJwkBASBFQL8tdSW0/+uQO2IAuO2i8QC3rFPO8mNyH5gKAPnyaJBbNXbrLZz/GWQ1MskYC+2ovspYdK6+kWIl5w==

这密文还挺长的,然后请教下为啥需要一个 background agent ?

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

https://www.v2ex.com/t/1005021

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

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

© 2021 V2EX