encryption - 创建直到以后我才能解密的加密
问题描述
我正在寻找一种方法来实现类似于“时间胸部”的东西,类似于“定时炸弹”。
这样做的动机来自于首先为 chrome 安装一个可提高生产力的扩展程序,该扩展程序会阻止社交媒体网站(例如 facebook、insta 等)。这些扩展的问题是我发现禁用扩展太容易了。为了使这更困难,我想用密码保护禁用功能。但是,如果我知道密码是什么,这将无济于事。我面临的问题的最简单解决方案是简单地要求现实生活中的朋友创建密码,而不是告诉我 X 持续时间,但我现在很好奇这是否可以通过加密算法/技巧代替。
例如,我输入字符串“apples”,算法将其编码为一些长而复杂的输出“sha1-output-apples”。现在,我将扩展禁用功能的密码设置为“sha1-output-apples”,然后清除我的剪贴板。然后我还想这样做,如果我再次尝试对“苹果”进行编码,它将给我不同的输出,直到经过一定的时间。
解决方案
您可以使用具有公钥解密的 JavaCard 和 NTP 等安全设备来实现您想要做的事情。
Java卡是一种设备,您可以在其中放入微小的代码并通过读卡器运行代码。存储在设备中的数据是加密的(它的安全程度取决于设备规范)。
NTP 证明时间,而 Javacard(或任何其他类似设备)在时间到来之前保护数据。
首先,您必须选择一个可信任的 NTP 服务器,然后放置您要加密的数据、NTP 公钥和一个仅在 NTP 响应的时间满足您的要求并且将有效签名提供给 Javacard 时才返回数据的程序。
您必须达到以下条件之一才能在 x 天之前窃取数据。
- 破坏 JavaCard 安全性
- 窃取NTP的私钥或破解服务器
如果这些对于您的目的来说足够困难,只要 NTP 服务器更改密钥或停止服务,您就可以使用它。
也许可以使用基于工作量证明的区块链来代替 NTP。有效的区块头列表就像一个不准确的时钟。你仍然需要弄清楚如何验证难度变化。
推荐阅读
- haskell - 使用 nix-shell 查找带有 cabal 的外国图书馆
- docker - PhpStorm 看不到 Docker 环境变量
- assembly - 如何知道在 LDRH 指令中将哪些半字位(8 位)移到 Rd(目标寄存器)?
- c++ - 在 std::u8string 和 std::string 之间转换
- android - 如何在 Ionic 应用程序中使用 Android App Bundle?
- ehcache - Web 应用中 ehcache 的评估
- java - 如何从Java中的If语句中的变量中获取值
- xaml - UWP 菜单栏不显示
- php - 查询当前登录用户购买的 Woocommerce 总额
- css - 字体在不同的缩放比例和显示尺寸下无法正确显示