V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
NeoAtlantis
V2EX  ›  分享创造

彼岸花计划:一个不能回避的话题

  •  1
     
  •   NeoAtlantis ·
    neoatlantis · 2016-03-13 15:39:08 +08:00 · 4160 次点击
    这是一个创建于 3178 天前的主题,其中的信息可能已经有所发展或是发生改变。

    (其实就是一个如何安全地留遗嘱之类的程序。

    通过互联网的使用行为来在发生不测之后发出通知的服务已经有很多了,比如早年的 deathswitch ,现在还有 Google 的闲置账户管理。但是,( 1 )平时将敏感信息寄放在这些服务上,让任何可能看到的人一眼就能看到,我并不放心;( 2 )登录上去,挨个更新给多个人的留言也不方便,( 3 )有些服务也限制了能发送的邮件的最大数量……于是见到各种缺点之后,我想到了这个用密码来加密存放信息的程序。

    先说用法:

    演示: http://area51.neoatlantis.info/demo.manjusaka.html
    进入之后输入解密密码,有 3 个分类可选,密码如下:
    test -> test
    parent -> a3ejtdxnl3tula2gcfqvfz45o4b2mt55
    friend -> 55kzqzupo4fzdbtexmr32rms5fhns45k
    问题的答案,生日是1970-01-01, ID 是0123456789ABCDEFG.

    这个程序最后会输出一个单一的网页,自带用来解密和显示内容的 js ,所以十分适合将网页拷贝给别人,或者——最好是——放到个人网站>个人简介之类的地方预先公开(避免出事情之后找不到)。

    程序的主页在 https://github.com/neoatlantis/manjusaka
    git clone之后,仿照sample-messages/下的格式建立自己的messages/目录,用 YAML 格式书写内容,之后用make即可。需要browserifyuglify。范例目录中的_acl.yaml有对参数的注释。

    技术细节

    访客来解密信息需要经过 3 个步骤:

    1. 首先需要输入用于解锁某个消息分类的密码。这个密码通过现有的邮件服务在不测之后发出。
    2. 程序验证存在(1)所提到的密码之后,将可能解密的消息找出来。这些消息还可能要求访客回答一系列问题。
    3. 访客在回答了所有的问题之后,问题答案将一并与(1)的密码合并生成对消息的解密密钥,解密消息。

    为了保证兼容性,这个程序虽然只使用了对称加密,也用了openpgp.js这个库。程序生成页面时在本地用 gpg+对称口令加密各种数据,然后在网页里用 js 解密。

    留言信息的解密密钥由 消息分类的密码问答题的答案 组成:

    1. 前者的安全性不用多说,只要密码足够长就可以。用来判断消息分类的密码是否正确的方法是将一个截断的密码的 SHA256 放置在结果网页中。由于消息分类密码本身熵足够大(比如 32 字节=256 比特),这么做是安全的。
    2. 后者(问答题)的原理是,用答案加密一个 16 字节左右的随机数据。只有答案正确才能解密、获取到这个随机的参数。这里有个问题是,通过枚举可以猜出答案,导致不但问答题的意义丧失,还会暴露隐私。所以解决方法是,
      1. 首先用较大的 S2K 参数(类似 PBKDF 之类函数的作用,是 gpg 自带的一个功能),增加枚举的难度;
      2. 其次是,建议用户设置十分复杂不容易猜解的问题。比如如果猜生日,那么过去 10 年只有不到 3660 种可能。但是如果猜“身份证号+姓名”,就有更大的空间。
      3. (正在考虑中)设置一个全局的解密密码,首先控制对所有谜题和消息的解密,然后通过 URL 加#的形式放置在通知邮件中。

    所以说到底,本程序也不仅仅可以用来留这么悲伤的消息了。也可以把其他的需要读者证明自己身份的信息放进来。

    要例行声明的是:
    因所述的密码方案未必成熟,不要马上把这个程序拿来加密自己的留言!
    (然而我会在感觉合适了之后自己就这么做的,嗯。)

    11 条回复    2016-04-16 19:28:18 +08:00
    windirt
        1
    windirt  
       2016-03-13 18:59:14 +08:00 via iPhone   ❤️ 1
    我之前考虑的是把数字遗嘱放到比特币区块链里面,按理说可以在几十年内防灾变,然后通过多方签名获取遗嘱正文
    Strikeactor
        2
    Strikeactor  
       2016-03-13 19:03:41 +08:00
    活着已是不易,哪管死后洪水滔天
    NeoAtlantis
        3
    NeoAtlantis  
    OP
       2016-03-13 22:39:30 +08:00 via Android
    @Strikeactor 只是不希望给别人带来更多困扰啊…
    likuku
        4
    likuku  
       2016-03-13 23:36:57 +08:00
    去年底, CCTV 特别报道了 “中华遗嘱库”:完全公益民营的遗嘱创建审核托管执行的 NGO 组织,有专业律师会帮助审核和修正遗嘱,并作相关公正(遗嘱会保存在三防标准的文档库)

    截止 2015 年底,仅仅北京市接到的申请预约都已经排到 1 年后了(1 年还是 2 年,不记得了),现在还有天津和广州两个分库,也同时接待。

    同时被科普一些知识:遗言 != 遗嘱;遗言并无法律效力,只是个留言,法律定义的“遗嘱”是内容和格式措辞都很严谨的一组文书,首先就得有财产清单。创建合法遗嘱,可以极大避免身后给亲友造成的很多麻烦 /永久遗憾。
    likuku
        5
    likuku  
       2016-03-13 23:44:10 +08:00
    节目里就举了一个例子,某著名艺术家,突然离世,没有遗嘱,他子女虽然都很团结,也都没有因为分遗产起任何矛盾,但仅仅是搞清老人的资产都是个大难题 (没有存折账密账册等等)。后来多方求助,民政局特别批示,让所有银行单位帮忙查找老艺术家相关的帐户,最后追踪汇总,总资产仅仅有 21 万人民币。老人从艺几十年,遗产肯定绝不止这个数,最后只追到这点,只能说是很遗憾了。

    更不用提还有争夺家产、老人赡养问题、突然冒出的私生子女(虽然可能亲生子女从来都不知道有其他一半血缘的兄弟姐妹存在),等等各种麻烦。
    NeoAtlantis
        6
    NeoAtlantis  
    OP
       2016-03-13 23:49:58 +08:00
    @likuku 感谢科普,我想用数字签名来验证这个信息真伪的话可比手写的都严谨。
    likuku
        7
    likuku  
       2016-03-14 10:38:52 +08:00
    @NeoAtlantis 其实关键不在于“信息真伪”,而在于 是否具备法律约束力 /法律上认可它是一份有效的“遗嘱”。
    moonkiller
        8
    moonkiller  
       2016-03-14 11:51:44 +08:00
    也考虑过这个服务~
    ffffwh
        9
    ffffwh  
       2016-03-15 01:10:10 +08:00 via iPad
    我的财宝都藏在大海深处,叫做 one piece
    everhythm
        10
    everhythm  
       2016-03-17 13:46:36 +08:00
    感觉做出来会很像 onepassword ?
    变成 1 个 平时记录有用信息,终时给出留言信息 的工具?
    lisheny
        11
    lisheny  
       2016-04-16 19:28:18 +08:00 via Android
    gg
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5577 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 07:18 · PVG 15:18 · LAX 23:18 · JFK 02:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.