「安全」用户 密码/隐私数据 如何存储更安全?

之前看到了关于用户主动加密以保证信息安全的文章

这里希望大佬们可以从开发者的角度来聊聊如何保证用户的信息安全

从前端到后端都可聊

尤其是党管密码的大环境之下

标题改成「作为开发者如何保证用户信息安全」更好?
反对 @一只bug 的说法。应该说:tg做这些没有意义。

为什么?

1. 因为加密的代价已经过于低廉。党可以立法,但是不可能禁止用户自己给自己的数据做什么。

2. https://github.com/openpgpjs/openpgpjs/blob/master/dist/openpgp.js 用JavaScript编写的全功能 OpenPGP 代码,只有1.42兆,你现在就可以下载下来。有了这个,你永远可以和朋友加密通信(但这个代码只是一个软件库,除非你能自己写代码运用它:不必担心,真到了那一天, 会做这个的人比比皆是)。

3. 退一万步,如果连 AES 这种国际标准的加密算法都禁止使用了,甚至所有的加密算法都被禁止,我们仍然可以使用散列函数构建安全的对称加密算法(具体办法是仿照ChaCha20这样的算法,用散列函数构建随机数发生器,将散列函数变成流加密密码;同一个函数还可用来构建消息认证码)。(甚至即将淘汰的SHA-1在这一用途上也还是安全的)这样做不能进行基于公钥的通信,不过如果双方事先约定了密钥,还是可以的。

下面这段代码,就是 Salsa20 这个加密算法的核心函数。你现在就可以拍照留念。只要有这个,我们就可以很快地构建出Salsa20这个加密算法,它的安全性是有证明的。

     #define R(a,b) (((a) << (b)) | ((a) >> (32 - (b))))
     void salsa20_word_specification(uint32 out[16],uint32 in[16])
     {
       int i;
       uint32 x[16];
       for (i = 0;i < 16;++i) x[i] = in[i];
       for (i = 20;i > 0;i -= 2) {
         x[ 4] ^= R(x[ 0]+x[12], 7);  x[ 8] ^= R(x[ 4]+x[ 0], 9);
         x[12] ^= R(x[ 8]+x[ 4],13);  x[ 0] ^= R(x[12]+x[ 8],18);
         x[ 9] ^= R(x[ 5]+x[ 1], 7);  x[13] ^= R(x[ 9]+x[ 5], 9);
         x[ 1] ^= R(x[13]+x[ 9],13);  x[ 5] ^= R(x[ 1]+x[13],18);
         x[14] ^= R(x[10]+x[ 6], 7);  x[ 2] ^= R(x[14]+x[10], 9);
         x[ 6] ^= R(x[ 2]+x[14],13);  x[10] ^= R(x[ 6]+x[ 2],18);
         x[ 3] ^= R(x[15]+x[11], 7);  x[ 7] ^= R(x[ 3]+x[15], 9);
         x[11] ^= R(x[ 7]+x[ 3],13);  x[15] ^= R(x[11]+x[ 7],18);
         x[ 1] ^= R(x[ 0]+x[ 3], 7);  x[ 2] ^= R(x[ 1]+x[ 0], 9);
         x[ 3] ^= R(x[ 2]+x[ 1],13);  x[ 0] ^= R(x[ 3]+x[ 2],18);
         x[ 6] ^= R(x[ 5]+x[ 4], 7);  x[ 7] ^= R(x[ 6]+x[ 5], 9);
         x[ 4] ^= R(x[ 7]+x[ 6],13);  x[ 5] ^= R(x[ 4]+x[ 7],18);
         x[11] ^= R(x[10]+x[ 9], 7);  x[ 8] ^= R(x[11]+x[10], 9);
         x[ 9] ^= R(x[ 8]+x[11],13);  x[10] ^= R(x[ 9]+x[ 8],18);
         x[12] ^= R(x[15]+x[14], 7);  x[13] ^= R(x[12]+x[15], 9);
         x[14] ^= R(x[13]+x[12],13);  x[15] ^= R(x[14]+x[13],18);
       }
       for (i = 0;i < 16;++i) out[i] = x[i] + in[i];
     }



4. 学术上正在讨论用散列函数构建公钥签名算法,如果这一算法得到优化,至少可以不必担心数字签名的问题(虽然这一点看起来和隐私有点无关,但是数字签名却能保证你下载的软件是完整、没有被第三者加入后门的)。

5. 对称加密和散列函数的破解难度,是无法用量子计算机显著降低的。量子计算机只能把 AES-256 的256比特安全性降低到一半,但128比特安全性还是足以保护你的数据(就是在你有生之年无法破解的程度)。


作为最终的用户,想要加密自己离线的隐私数据,目前最好的方案还是转用 Linux。当前 Fedora、Debian、Ubuntu 等操作系统在安装过程中都提供了设置全磁盘加密的选项。有了这个,就算你的硬盘落入警察手中,他们也无法破解。(但你仍然要考虑被逼供的问题)
对内保防侦查局 西南某地国安,各位葱友注意保护隐私
你保存在海外比较安全,国内都会让运营商自己交上来的
有秘密不说出口,然后安静的带进墓地最安全。

密码学建立基础理论是:敌人无法在合理时间内知道秘密,没有任何算法可以抵抗暴力破解。数学家能做事情尽量提高敌人破解所需要的时间成本,目前一次性密码理论安全性最高。

大道至简,多说无意。
xitler200 翠奭奭
關於訊息安全方面當然要閱讀編程隨想的教學囉!雖然如他所說一樣,除非是他這種的大壞蛋,普通人真的不值得匪共關心,更遑論被嚴刑逼供,用不上這些技巧。

不過看到李洪元這種普通打工人土都要秘密錄音+雙重拷貝備份才能為自己洗脫罪名,就覺得這些知識多懂無害。

二十字這樣都不足夠????二十二十二十二十二十二十二十二十二十字

二十二十二十二十字

二十二十二十二十字
n07_3x 曾就职大陆信息安全行业某乙方公司研究岗,相关问题可以问我
推荐一个密码管理方案
本质上就像一个自定义的hmac,你只需要记住一个密码就能生成在不同场景下使用的不同密码。
而且是纯算法的实现,不像某些方案需要在服务器/本地保存加密后的密码
meta_chaos Why there is something rather than nothing?
开发者只能防黑客,根本对抗不了行政力量。

公安可以给公司打电话要求明文储存。
在IM上检测到加密内容,敏感地区公安可以直接调出信息,请用户喝茶交出密钥。
你人和机都在对方手上,多说无益。

所以从开发者的角度看,最好的方法是不开发,逼用户使用墙外软件服务,为老大哥增加一点成本。
次好的方法就是不存储,不替老大哥收集信息。
墙内做这些没有意义,你敢开发就是和tg作对,tg这次是认真的
Resistance 编程随想读者|会点IT技术|爱好信息安全|关注隐私保护
简要提几点,想到哪写到哪:

  • 不要使用法律有相关限制的国家和地区的服务器
  • 密码使用 Argon2 算法(PHP 7.3+ 默认使用,其他语言使用 sodium 库的 bindings)
  • 服务端不记录 IP,不要求用户提供手机号、身份证等重要个人信息
  • 尽量使用 Web 完成所有功能。如非必要,不要开发客户端(因为客户端更容易收集个人隐私),客户端要开源
  • 做好安全加固和定期检查,避免骇客入侵

要发言请先登录注册

发起人

演歌界の黒船,日本第一位黑人演歌歌手,2008年日本唱片大奖最优秀新人奖

状态

  • 最新活动: 2020-01-02
  • 浏览: 5787