[Solidity][区块链安全入门]Solidity言语关于密码学常识的运用以及存在缝隙
暗码学
区块链经过暗码学算法想要完成的性质有:机密性 完整性 身份认证和不可否认性
对称密钥算法:经过安全的办法或许信道去同享加密密钥 可是没有解决不可否认性,意味着一切具有密钥的人都能加密 每逢有成员脱离时,密钥需求进行更新
常见的对称暗码算法:
公钥暗码算法&非对称密钥算法
每个用户都有公私钥对
常见算法
散列函数
依据音讯内容得出仅有的 有固定长度输出值的函数 如SHA-1 SHA-2 MD5 等,一般又称杂凑算法
能够用于数字签名和文件校验等,只能单向运算
数字签名的两个显着效果:向接收方确保信息来自声明的发送者 且进程中不可否认;向接收方确保传输进程中不会被改动
同态加密:在不透显露元数据的情况下,对同态加密的数据处理后再将输出进行解密,与元数据依照同一办法进行运算的结果是相同的
代数同态:既是加法又是乘法同态 算术同态:一起满意加减乘除四种同态
同态加密是一种公钥加密算法 能够让密文具有核算功用 无需解密就能直接对密文进行处理,运用同态加密能够让智能合约能够处理密文,但无法取得实在数据,极大进步隐私安全性
零常识证明:
证明这能够在不向验证者供给更多有用信息的情况下,使验证者信任某个结论是正确的。如用户注册暗码的保存 向实习公司供给未挂科证明却并未看到成果 用公私钥验证身份等
在区块链的国际中,用地址来表明买卖两边,这样达到了匿名的效果。可是,链上的信息虽然是匿名的,可是经过链上信息绑定的链下信息,像许多买卖所都绑定了链上地址与链下的银行账户、付出宝,这样能够很便利的追溯实在国际的买卖两边,使得匿名性化为乌有。
那么,有没有一种办法,能够在躲藏发送方、接受方以及买卖金额等其他细节的情况下,确保买卖有用呢?
答案便是:零常识证明
经过运用零常识证明机制,能够将买卖两边的地址、买卖细节躲藏起来。
现在ZCASH(大零币)运用零常识机制来证明买卖有用,在ZCASH中,摒弃了之前的UTXO办法,而是运用了一种根据UTXO,被称为NOTE(支票)的新办法替代。NOTE代表了当时账户对财物的支配权,与UTXO不同,账户余额的存储办法不再是“未消费的买卖输出”,而是“未被报废的支票(NOTE)”;一个NOTE是由一切者公钥PK、所具有金额V、和仅有区别支票的序列号r组成,表明为NOTE=(PK, v, r)。
ZCash买卖分为两类:通明地址买卖和躲藏地址买卖。通明地址买卖的输入、输出直接是可见的NOTE信息;
躲藏地址买卖,输入和/或输出的地址和金额是躲藏的。
在ZCASH的躲藏地址买卖中,买卖的输入输出不再是明文的NOTE,而是NOTE的签发和抛弃告诉。如下图:
左边代表的是“签发的新的NOTE”,右侧代表的是“报废的NOTE”。每次进行转账,就会把转账方的NOTE放到报废列表里,代表此NOTE现已报废,一起为收款方创立一张等额的NOTE。这样就完成了“财物的搬运”,而且因为都是记载的NOTE的哈希值,因而并不知道被抛弃的和新签发的NOTE的内容,这样就做到了躲藏买卖两边及买卖细节。
环签名技能(把身份藏进人群里 然后维护签名者) 典型的使用事例 :门罗币
环签名中签名者运用自己的私钥和调集中其他成员的公钥就能独立签名,调集中的其他成员或许不知道自己被包括在内
隐私要挟和维护:
用户身份隐私首要是指买卖两边的地址信息:
一般用的办法是混币机制,行将多笔买卖混合在一起,堵截买卖方和接收方的联络。进步加密钱银的隐私性和匿名性。
混币进程的履行能够由可信第三方或许某种协议去履行 混币机制也可分为根据中心化节点的混币机制和去中心化的混币机制
网络隐私
分为节点隐私(服务器地理方位,节点物理信息,体系版别,节点IP等)和通讯隐私(数据流量,节点间数据明文和密文)
对公有链来说 进犯者能够经过监听,扫描技能对整个网络进行勘探进犯
使用隐私:
分为服务器隐私和客户端隐私
首要内容:付出流灵敏信息 浏览器cookie,密钥寄存方位,
要挟一般不是来自区块链技能自身,而是用户和服务商
服务商露出隐私的源头首要来自操作不妥或许服务缝隙。如服务商颁发用户的权限不匹配,服务商揭露信息中存在灵敏信息,插件中存在缝隙