有没有哪种非对称算法,生成签名很难,校验很容易
用于接口验签
客户端有数据 d 需要校验
通过算法 H(d) = sign, 比如这个 H 算法每次计算耗费 1G Ram,10M 条指令。总之就是消耗资源,耗时 100 毫秒,又不影响用户体验。
对应的服务端验签,比如有个密钥或者什么东西(key)能加速这个过程,使得验签算法 H2 验证很快,内存消耗也极小
H2(d,key) = sign.
举个简单例子,(理解意思就行,实际算法肯定是从 H 无法推算出 H2 的
H(a) = a + (a + 1) + (a + 2) + (a + 3) + ... (a + 99) ; // 就是死算
那么服务端 H2 直接验签 key = 4950;
H2(a,key) = 100 a + 4950
看看比特币的原理找点思路?
你目的是啥
这不就是最初的工作量证明么,Hashcash 用于防止垃圾邮件的。
后来才用于区块链
工作量证明+1, 貌似可以任意指定一个 hash 函数 H(a, b), 先要求客户端找到一个 key, 使得 H(d, key)满足某种条件, 如包含 n 个前导零. 服务端拿到客户端发来的 key 后, 计算 H(d, key)简单校验即可.
可以去了解一下 delay function 或者 delay encryption ,利用这些密码学的基础算法应该可以实现你需要的功能
验签不是直接比较吗?根本就不花时间啊。
防止接口被暴力破解被人刷数据。
离散对数问题?
ECC
如一楼的建议:
- 建立连接后,服务端生成随机数据 R 返回给客户端
- 协议规定,客户端必须找到数据 r 使得 sign=H(d+R+r)满足某种条件,比如低 n 位为 0
- 客户端再次提交(d, sign, r)
- 由于知道 r ,服务端可以很快验证签名
pow 老了,pos 向你招手
“耗费 1G RAM” “不影响用户体验”
如果你想要计算需要大内存,你需要寻找 memory-hard function ;如果你要时间长,则需要 time-lock puzzle 。
通常来说产生签名的人需要知道特殊的内容( key )。在楼主的场景下,验证签名的人因为有所谓的“快速验证”,所以知道(另一个)特殊内容( key )也算合理。但我没有明白搂住想要解决什么问题。
防 C C 攻击验证?
保护接口呀,举个例子,客户端发布后,肯定 H 方法会被人知道,甚至把代码提取出来做成动态库 ,通过这个库签发错误数据给服务器扰乱业务。
如果能做到让他代价最大化,服务器收到错误数据最小化。前面 v 友说的 bitcoin 方式貌似不错。
唯一问题是耗时是概率性的,总有可能有用户长时间算不出来
#14 那么你不应该用“签名”,因为签名的最基本功能是让只有特定人才能产生有效签名,这里没有类似的场景。你可以用 #4 提到的 Hashcash ,通过恰当设置 scheme ,可以让长时间算不出来的概率可忽略,从而在一切现实场景下都不是问题;也可以用 #5 提到的 verifiable delay function 。
实际操作里非密码学方法更常用,比如用业务逻辑限制访问频率。
感觉是用身份验证和频率限制可以解决的事情
分解质因数就行, 时间复杂度 O(n^0.5).
生成一个合适的素数让客户端去分解.
检验的时候,先用 miller-rabin 确定上传的都是质数,再乘起来检验结果.
生成一个合适的数字(不是素数)让客户端去分解.
SM4
写错了,应该是 SM2 。
好吧,看了需求,SM2 也不符合。
难怪现在的网页和 app 越来越卡了,都啥呀
环境太差, 恶意竞争太多了,没得办法啊。 我看过有的 app 直接用的 sleep 防止被恶意利用,但这容易被跳过。
但是 pos 面临着资本垄断的问题几乎是显著的
VDF
我是做 Java web 开发的,想自己偶尔做个小网站自己用。但是 web 方面的脚手架实在是太多了,不知道哪个能做到快速开发,体积小,基础功能还多的。之前也用过 Django…
服务器和数据密码都是写在代码的配置文件里的,开发人员离职需要重新修改一遍,比较麻烦,有没有比较好的解决方案不需要修改? 不修改. 他离职了又连不上, 有啥好改的 …
程序退出后,生成了一个 hs_err_pid1301132.log 文件,前面的内容如下,可以根据这个判断出是什么原因导致的吗? A fatal error has been…