精华内容
下载资源
问答
  • 在不泄露明文的前提下,如何对隐私数据的内容进行承诺?密码学承诺的密文形式和普通的数据密文有何区别?隐私数据如何在密码学承诺的形式下依旧保持可用性?在量子计算的安全模型下,是否依旧可以构造...

    在不泄露明文的前提下,如何对隐私数据的内容进行承诺?密码学承诺的密文形式和普通的数据密文有何区别?隐私数据如何在密码学承诺的形式下依旧保持可用性?在量子计算的安全模型下,是否依旧可以构造安全可用的密码学承诺?

    隐私保护方案设计中,除了保护隐私数据的机密性,确保密文形式隐私数据解读的唯一性也是重要的业务需求。业务流程中,很大程度会依赖隐私数据的具体数值,如果允许攻击者在自身利益驱动下,对处于密文形式的隐私数据进行任意解读,势必会对业务的整体公正性和有效性带来巨大影响。

    以电子支付为例,一家银行为一位客户开具了一张面额1000元的电子支票,电子支票以密文形式交付给客户,流转过程中不会轻易泄露金额。然而,在使用时,银行也不希望客户能够将这张电子支票解读成其他金额,如10000元。多兑现的9000元会造成银行的损失,银行甚至可能因此而停用整个密文电子支票业务。

    这里的解读解密有一定区别,对密文数据解读不一定需要对密文数据进行解密。在上面示例中,当客户花费这张面额1000元的电子支票,解读时只需要证明电子支票的消费额小于未花费余额即可,而不需要解密未花费余额的具体数值。

    解决以上业务问题的关键,就在于密码学承诺的使用。密码学承诺有何神奇之处?且随本文一探究竟。

    1. 哈希承诺

    在日常生活中,承诺无处不在。例如,预约打车成功后,司机和乘客之间就互相做了一个承诺。到了预约时间,乘客等车,司机接客,这就是在兑现承诺。

    信息科学中也有类似的承诺技术存在。例如,某些网站在提供下载文件时,也会提供对应文件的单向哈希值(单向哈希算法相关内容可以参考第9论)。这里,单向哈希值便是一种对文件数据的承诺,以下称之为哈希承诺。基于下载的哈希承诺,用户可以对下载文件数据进行校验,检测接收到的文件数据是否有丢失或变化,如果校验通过,相当于网站兑现了关于文件数据完整性的承诺。

    密码学承诺是一类重要的密码学原语,其中哈希承诺又是诸多技术中最简单的一种实现方式。

    一般而言,密码学承诺的应用涉及承诺方验证方两个参与方,以及以下两个使用阶段。

    第一阶段为承诺生成(Commit)阶段,承诺方选择一个敏感数据v,计算出对应的承诺c,然后将承诺c发送给验证方。通过承诺c,验证方确定承诺方对于还未解密的敏感数据v只能有唯一的解读方式,无法违约。

    第二阶段为承诺披露(Reveal)阶段,学术界通常也称之为承诺打开-验证(Open-Verify)阶段。承诺方公布敏感数据v的明文和其他的相关参数,验证方重复承诺生成的计算过程,比较新生成的承诺与之前接收到的承诺c是否一致,一致则表示验证成功,否则失败。

    一个设计良好的密码学承诺具备如下特性:

    • 隐匿性:在打开关于v的承诺c之前,验证方不知道承诺方选择的敏感数据v。

    • 绑定性:在关于v的承诺c生成之后,承诺方难以将已承诺的敏感数据解释成另一个不同的数据v'。

    所以,密码学承诺可以起到与日常生活中的承诺行为类似的效果,一旦做出承诺,就必须在披露阶段使用之前已经承诺的敏感数据。

    对应地,在业务系统中,承诺生成阶段通常被用来生成密文形式的业务数据,而承诺披露阶段则多被用于在特定业务流程中进行数据校验。

    除了直接公布敏感数据明文之外,承诺披露阶段所需的数据校验,也可以在不公布敏感数据明文的前提下,构造零知识证明来完成。相关内容将在后续零知识证明专题中展开。

    具体回到哈希承诺,用户可以通过以下公式计算关于敏感数据v的承诺,其中H是一个密码学安全的单向哈希算法。

    基于单向哈希的单向性,难以通过哈希值H(v)反推出敏感数据v,以此提供了一定的隐匿性;基于单向哈希的抗碰撞性,难以找到不同的敏感数据v'产生相同的哈希值H(v),以此提供了一定的绑定性。

    哈希承诺的构造简单、使用方便,满足密码学承诺基本的特性,适用于对隐私数据机密性要求不高的应用场景。

    对隐私数据机密性要求高的应用,需要注意哈希承诺提供的隐匿性比较有限,不具备随机性。对于同一个敏感数据v,H(v)值总是固定的,因此可以通过暴力穷举,列举所有可能的v值,来反推出H(v)中实际承诺的v。

    相比其他密码学承诺技术,哈希承诺不具有便于业务系统在密文形式对其处理的附加功能,例如,多个相关的承诺值之间密文运算和交叉验证,对于构造复杂密码学协议和安全多方计算方案的作用比较有限。

    2. Pedersen承诺

    Pedersen承诺是目前隐私保护方案中使用广泛的密码学承诺,相比哈希承诺,构造略微复杂,但提供了一系列优异的特性:

    • 信息论安全(参见第4论)的理论最强隐匿性。

    • 基于离散对数困难问题(参见第3论)的强绑定性。

    • 具有同态加法特性的密文形式。

    其具体构造如下:

    有别于哈希承诺,对于同一个v会产生相同的承诺H(v),Pedersen承诺通过引入随机致盲因子r,即便隐私数据v不变,最终的承诺c也会随着r的变化而变化,以此提供了信息论安全的隐匿性。

    Pedersen承诺在构造中采用了离散对数运算,因此也赋予其加法同态性。可以通过两个分别关于v1和v2的Pedersen承诺c1和c2“相加”,得到的新承诺便是关于v1+v2的Pedersen承诺。

    除了能够构造关于v1+v2的Pedersen承诺之外,Pedersen承诺还可以用来构造v1*v2、v1 || v2等更复杂的Pedersen承诺,通过基于离散对数的通用零知识证明系统,来证明新产生的承诺满足与原始承诺c1和c2之间存在指定的约束关系。

    在实际业务中,Pedersen承诺自带的加法同态性,配合零知识证明获得约束关系证明功能,在区块链中可以有广泛的应用,目前主要以隐匿账本的形式,提供灵活的隐私数据的密文上链存证和交易密文数值关联性的第三方验证。

    具体方案设计中,相关业务方在链下完成业务交互之后,将对应的数值变化表达成Pedersen承诺,再将对应的承诺数据上链,这个过程中无需披露任何隐私数据明文。

    上链之后,非相关的第三方虽然难以通过Pedersen承诺的密文形式反推出隐私数据明文,但可以验证承诺之间的约束关系,核实业务交互的合法性,例如,验证隐匿转账发生之后,依旧满足会计平衡、外汇交易中使用了正确汇率进行跨行对账等。

    值得注意的是,Pedersen承诺产生的密文形式,与通过普通加解密算法生成的数据密文有一定相似性,在计算过程中都使用敏感数据v,致盲因子r的作用和密钥的作用也有一些相似,均用以混淆最后的密文输出。

    但不同的是,密码学承诺不提供解密算法,如果只有r,无法有效地提取出敏感数据v的明文,只能通过暴力穷举所有可能的v值的方法逐一验证,试图通过匹配的承诺值来破解v的明文。

    所以,Pedersen承诺重在“承诺”,适用于数据属主向第三方证明承诺中的敏感数据满足一定的约束关系,由于不直接提供解密功能,不能直接支持需要互不透露敏感数据明文的多方协同计算,这一点与密码学领域的同态加解密算法有很大区别,切勿混淆概念。

    3. 量子承诺

    为了应对量子计算可能带来的风险,寻求经典密码学承诺技术的替代品,后量子密码学承诺也是重要的研究方向之一。比较典型的方案有量子比特承诺。

    量子比特承诺(Quantum Bit Commitment)是基于量子力学原理构造的比特承诺方案,具体实现可以抽象为一个带随机输入的单向哈希算法。

    根据单向函数的单向性,承诺方向验证方发送r1和c后,验证方不知道v,满足对v的隐匿性。另外,由单向哈希的抗碰撞性可知承诺方难以找到r2′和v’,使H(r1 , r2 , v) = H (r1 , r2′, v′),因此承诺方难以违约,满足对v的绑定性。

    量子比特承诺的构造看似简单,但实际实现需要借助量子协议完成计算,同时也有一定的理论局限性。 

    早在1996年,Hoi-Kwong Lo和Hoi Fung Chau团队、Dominic Mayers团队分别独立地证明了不存在满足信息论安全的理论最强绑定性的量子比特承诺方案。这个不存在性被称为MLC no-go定理。其主要原因是,如果验证方完全没有任何承诺的信息,那么承诺方可以通过量子纠缠随意地改变承诺内容,而验证方既不能阻止也不能发现承诺方的违约行为。

    总体而言,后量子密码学承诺的研究尚处于早期阶段,充满了各类挑战,目前难以直接应用到实际业务系统中。除了量子比特承诺之外,基于模糊算法的量子模糊承诺也是一类热门研究方向,目标应用领域为生物特征识别相关的隐私安全系统。将来不排除有更实用的方案面世,以此消解量子计算可能带来的冲击,我们将持续保持关注。

    正是:业务数据精确至毫厘,密码承诺隐匿遁无形!

     

    密码学承诺的隐匿性和绑定性是隐私保护方案设计中常用的关键特性,在保障隐私数据机密性的同时,也保证了密文形式隐私数据解读的唯一性。对于业务系统设计而言,密码学承诺为隐私数据提供了另一种高效的密文表达方式。

    本论中,我们重点介绍了哈希承诺和Pedersen承诺,在往后的文章中,我们还会进一步介绍其他重要的密码学承诺,例如zk-SNARKs零知识证明系统中使用的多项式承诺、向量承诺等。

     

    对于需要在数据的密文形式上直接进行运算和交叉验证的业务,只要不涉及互不透露数据明文的多方协同计算,相比现有同态加密算法,以Pedersen承诺为代表的密码学承诺往往可以提供更好的性能。这一优势与密码学承诺的同态性密不可分,如何构造和应用同态性,敬请关注下文分解。


    《隐私保护周三见》

    “科技聚焦人性,隐私回归属主”,这是微众银行区块链团队推出《隐私保护周三见》深度栏目的愿景与初衷。每周三晚8点,专家团队将透过栏目和各位一起探寻隐私保护的发展之道。

    栏目内容含括以下五大模块:关键概念、法律法规、理论基础、技术剖析和案例分享,如您有好的建议或者想学习的内容,欢迎随时提出。

    栏目支持单位:零壹财经、陀螺财经、巴比特、火讯财经、火星财经、价值在线、链客社区

    往期集锦

    第1论|隐私和效用不可兼得?隐私保护开辟商业新境地

    第2论|隐私合规风险知几何?数据合规商用需过九重关

    第3论|密码学技术何以为信?深究背后的计算困难性理论

    第4论|密码学技术如何选型?初探理论能力边界的安全模型

    第5论|密码学技术如何选型?再探工程能力边界的安全模型

    第6论|密码学技术如何选型?终探量子计算通信的安全模型

    第7论|密码密钥傻傻分不清?认识密码学中的最高机密

    第8论|密钥繁多难记难管理?认识高效密钥管理体系

    第9论|密码学原语如何应用?解析单向哈希的妙用

    第10论|密码学原语如何应用?解析密码学特有的数据编解码

     

    展开全文
  • 密码原语的测试向量 现有的测试向量 组织: primitive/source/... 要做的事情 文件格式 TODO标准化文件格式; 最好是比 NIST 的 RSP/FAX 格式需要更少解析的东西。 (coruus 的标准:在 C 中易于解析。jedisct1 ...
  • 软件中密码原语的自动识别 Felix Gröbert 的文凭/硕士论文 2010 年 2 月 7 日 在本论文中,我们研究并实现了在软件中检测密码算法及其参数的方法。 根据我们对密码代码的观察,我们指出了设计基于签名和通用识别...
  • Cifra是针对嵌入式使用的密码原语的集合。 目的 为了降低重要性,cifra致力于: 清晰和简单。 某些算法中固有的旁通道泄漏的对策。 适用于嵌入式应用。 特别是:cifra使用标准C库的绝对最小值,并且在代码和数据...
  • 该库的目标是提供易于使用的API,该API可以对某些后量子密码方案进行快速实验。 用户不应期望此代码提供任何级别的安全性。 该库不能用于实时生产系统。 计划支持 姓名 NIST回合 x86优化 凯伯 3 X NTRU 3 X ...
  • Rust DjangoHashersDjango Project 中使用的密码原语的 Rust 端口。Django 的django.contrib.auth.models.User类有一些处理密码的方法,比如set_password()和check_password() ;DjangoHashers实现了这些方法背后的...
  • 隐私数据密文控制权只能由单一主体掌控?代表控制权的密钥如何才能安全地交由多个互不信任的主体协同使用?如何在技术层面保障多方授权的公平公正性?任一参与协作的主体密钥丢失,如何实现安全可靠的容灾恢复?...

    隐私数据密文控制权只能由单一主体掌控?代表控制权的密钥如何才能安全地交由多个互不信任的主体协同使用?如何在技术层面保障多方授权的公平公正性?任一参与协作的主体密钥丢失,如何实现安全可靠的容灾恢复?

     

    在业务方案设计中,安全可控地让多个隐私主体参与数据协作,是隐私保护技术创造新兴商业价值的关键之一。在这一过程中,代表控制权的密钥由哪一方来掌握,是影响参与者合作意愿的重要因素。

     

    因为哪一方拥有了密钥,相当于哪一方就获得了控制权,未能掌控密钥的另一方,则可能在合作关系中处于弱势。这将成为实现公平对等多方协作关系的一个关键阻碍。

     

    以多方决策为例,上市公司的一次董事会会议中,需要多数董事对决策项进行签字才能生效。出于某些影响,会议无法面对面举行,所有董事必须使用数字签名来远程完成这一个签字过程。为了保证决议过程的机密性和公正性,每位董事不希望其他董事知晓自己的选择,同时要让股东团体对最后的决策结果,即聚合后的签名,进行验证。

     

    这个过程中,存在三个隐私保护相关的主要功能点:

    • 每位董事的签名控制权须由自己控制,而不是由中心化的可信第三方来代理行使权力。

    • 代表决策结果的聚合签名只需多数董事同意,便可生成合法的声明。

    • 股东团体需要对聚合后的签名进行验证,但无需知道具体哪些董事对此进行了签名。

     

    以上功能点涉及在多方协作过程中,如何将原本单个的密钥安全地打碎成多个密钥分片,并让每个主体独立使用自己的密钥分片,合作完成所需的密码学协议过程。解决这一问题的关键,就在于门限密码算法的巧妙构造。

     

    门限密码算法在多方协作的相关场景中应用十分广泛,可以实现数据联合授权、认证、密钥安全恢复、密钥安全交换等需求,在诸多分布式多方计算协议中均可见其身影。

     

    本文主要从秘密分享、门限加密、门限签名三大应用方向,分享门限密码算法的奇妙之处。

     

    秘密分享

     

    1979年,Adi Shamir和George Blakley各自独立地提出秘密分享(Secret Sharing)的概念,奠定了门限密码学体系的基础。

     

    具体而言,秘密分享是指一种安全地在多个参与者之间分享秘密的方式,其满足以下特性:

    • 每个参与者都独立持有一部分关于秘密S的分片,只有将足够数目的分片组合起来,才能够重新恢复出秘密S。

    • 当获得的分片数量不足时,无论采用何种组合策略,不会泄露关于秘密S的任何信息。

     

    秘密分享在学术上的价值在于,提供了一种技术手段,将原本单一的密钥,以密钥分片的形式,安全地、平等地分配到多个参与者手中,除此之外,还实现了以下额外的安全特性:

    • 容错高可用:不会因为少量密钥分片损坏和丢失,而导致密钥不可用。

    • 抗侧信道攻击:原本固定的密钥,在密码学算法工程实现的执行过程中,可能会泄露一部分密钥的信息(参见第5论中的灰盒安全模型),但进行分片之后,成功实施此类攻击的难度将指数上升。

     

    对于业务应用而言,主要使用的特性是密钥安全平等分配容错高可用,可以用来满足价值贵重的物品或权利不能由单一主体掌控的业务需求,以此控制盗用、滥用等潜在风险。

     

    例如,董事会的印章不能由单独的成员持有,银行保险箱的钥匙不能由单独的职员保管。在数字化的场景中,涉及多方隐私数据的业务合作,数据密钥也不能由单一主体掌管。

     

    为了实现安全的秘密分享效果,最直接的秘密字符串分片方式并不能保障其安全性,攻击者无需收集足够的分片,便可以获得秘密的部分信息,示例如下:

     

     

    因此,我们需要引入更为精巧的分片构造方式。

     

    最常见的构造方式利用了拉格朗日多项式插值算法。其核心思想为,t个点可以确定一个t-1阶多项式对应的曲线。每一个秘密分片都相当于多项式曲线上的一个点:

    • 只要收集不同点的数目达到t个,就可以通过拉格朗日多项式插值算法求解出多项式中代表秘密的系数值。

    • 如果点的数目不足t个,对应的多项式有无限多个,对应的秘密可能是任意值,对秘密的机密性保护达到了信息论安全。

     

    具体构造方式可以参考Shamir Secret Sharing的(t, n)秘密分享方案,即,将秘密分为n份,任意t份都可以完整地恢复出拆分前的秘密。构造过程如下:

    • 将秘密S作为多项式的第0阶常量系数,其余t-1个系数随机生成,由此构造出一个t-1阶的多项式,对应的曲线为C。

    • 在曲线C上随机选n个不同的点,将其分发给n个参与者。

    • 只要不小于t个参与者同意使用自己的点参与协同运算,便可恢复出曲线C对应的多项式,取其中第0阶常量系数,便可获得秘密S。

     

     

    秘密分享在分布式密钥生成、密钥容灾恢复、数字版权管理、数据安全传输等业务领域中都有广泛应用。同时,秘密分享也是用于构造安全多方计算的重要技术之一。

     

    基础的秘密分享方案可以进一步扩展为可验证秘密分享、多级多秘密分享、定期更新分片的主动秘密分享、可随时变更参与者的动态秘密分享、基于身份的秘密分享等方案,满足多方协作中多样化的业务需求。

     

    秘密分享是所有门限密码算法的基础,解决了算法设计中密钥控制权安全分发的问题,用技术手段保障了隐私数据多方协作中,权利均衡、平等互信的效果。

     

    门限加密

     

    门限加密方案是门限密码算法常见应用之一,常常体现为一类分布式加解密协议,可以实现如下功能:

    • 任意用户都可以使用公钥对数据进行加密。

    • 私钥的所有权由多个指定的秘密持有者联合控制,只有满足数目的秘密持有者合作,将解密分片聚合,才能实现解密。

     

    门限加密方案可以有效保护需要多方授权才能使用的隐私数据。回到之前董事会决策的示例,目前有一份敏感的业务数据需要给董事会成员汇报,由于数据的敏感性,需要确保有足够数量的董事在场,数据才能被解密。

     

    门限加密方案可以很好地满足这一需求。传输业务数据前,使用门限加密的公钥对其进行加密,产生的密文只有当数量不少于门限值的董事授权同意之后才能进行解密。

     

    使用门限加密方案的一般流程如下:

    • 初始化:n个参与者约定设置门限值t,并获取自己的私钥分片x,联合计算数据加密公钥PK并公开。

    • 加密:数据贡献者使用公钥PK对数据明文m进行加密,生成密文E(m)。

    • 生成解密分片:参与者分别使用自己的私钥分片x对密文E(m)进行解密,生成解密分片D_x(m)。

    • 聚合解密分片:参与者将解密分片聚合,只有获得不小于t个不同的解密分片D_x(m)之后,才可以完成聚合解密,获得数据明文m。

     

     

    理论上,门限加密方案可以基于不同的计算困难性问题(参见第3论)构造,例如,基于离散对数的ElGamal门限密码学体系、基于Diffie-Hellman的门限密钥交换协议、基于大素数分解的RSA门限密码学体系、基于椭圆曲线离散对数问题的BLS门限密码学体系等。

     

    工程上,门限加密方案目前已经比较成熟,以经典论文《Simple and Efficient Threshold Cryptosystem from the Gap Diffie-Hellman Group》为基础的开源参考实现为例,在个人计算机上,对单个数据块进行单次分片聚合和解密的耗时都在微秒级,已经可以满足大部分业务的商用性能要求

     

    应用上,除了之前描述的多方授权数据解密之外,门限加密方案在匿名电子投票、数据代理服务、数据外包计算等需要为多个数据贡献者提供联合数据使用授权特性的领域,均有广泛应用前景。

     

    门限签名

     

    门限签名方案是门限密码算法最常见的应用。同样基于秘密分享的核心理念,门限签名方案通过将私钥拆分成多个秘密分片,实现了如下效果:

    • 只有当不少于门限值的秘密分片持有者共同协作,才可以生成有效的签名。

    • 即便部分秘密分片丢失,只要剩余秘密分片不少于门限值,依旧可以生成有效的签名。

    • 联合生成的签名中,并没有透露具体哪些持有者参与了签名过程。

     

    在业务应用中,门限签名方案可以用来构造有效的多方联合签名流程。相比传统数字签名方案,整个签名过程消除了由单一主体保管密钥带来的系统性单点故障风险,以及跨机构信任问题。

     

    每位秘密分片的持有者对签名私钥拥有平等的控制权,门限签名方案同时提供了私钥容灾恢复功能和外部验证匿名性。

     

    这类方案可以显著提高用户对数据认证的信任,并促进多方平等合作,对于目前使用数字签名的所有应用场景都适用,可以看作是传统数字签名方案在分布式商业环境中的全面升级。

     

    使用门限签名方案的一般流程如下:

    • 初始化:n个参与者约定设置门限值t,并获取自己的私钥分片x,联合计算数据验签公钥PK并公开。

    • 生成签名分片:参与者使用私钥分片x对数据m生成签名分片sig_x。

    • 聚合并生成签名:将签名分片合并,只有不少于t个签名分片才能生成完整签名sig。

    • 验证签名:验证者使用公钥PK,对关于数据m的签名sig进行验证。

     

     

    与门限加密方案类似,门限签名方案可以基于不同的计算困难性问题(参见第3论)来构造实现,例如,可以构造基于SM2国密标准算法的门限签名方案。

     

    目前较为常见的开源实现,主要是基于BLS(Boneh–Lynn–Shacham)的签名算法。该方案验证效率尚可,但在签名聚合环节,生成签名的耗时会随参与者数量的增加而显著增加,可以达到毫秒级,比传统的数字签名方案慢几个数量级。

     

    除此之外,目前的门限签名方案在初始化过程中,如果不依赖可信第三方,会面临交互轮数过多、构造复杂等问题。以上工程问题对需要进行高频签名操作的应用来说,可能会带来一定性能上的挑战,但对于一般应用来讲,应该不会成为性能瓶颈。

     

    总体而言,门限密码学方案提供了一系列高效、易用的隐私保护分布式数据协作技术。随着其应用越来越广泛, NIST于2019年提议对门限密码学相关的密码学原语进行标准化,分别从单一主体使用和多方协作使用两个方向,对门类众多的门限密码学方案进行归类和标准化尝试。

     

    在标准化完成之前,根据具体的业务需求,门限密码学方案的基础技术选型可以参考下图:

     

     

    正是:多方协作密钥谁掌控,门限密码分权众做主!

     

    门限密码学方案通过对隐私保护方案中的密钥进行分片,使得对于密钥所代表的数据控制权进行按需分配成为了可能。对于源自多方的隐私数据,门限密码学方案提供了安全、平等、高效的协同认证和计算工具,可以用来解决现代分布式商业环境中,所面临的多方数据认证、可信数据交换等核心业务挑战。

     

    多方数据协作场景中,基于可信硬件(TEE)的解决方案也是目前行业研究的热点,其背后涉及哪些原理,欲知详情,敬请关注下文分解。

    展开全文
  • 密码学工程中,有哪些特有的数据编解码方式、存在哪些认知误区和注意事项、需要克服哪些限制和挑战? 作为支撑隐私保护方案的核心技术,如何运用数据编解码,将密码学论文中抽象的数学符号和公式具象成业务中具体...

    隐私保护方案的工程实现,如何关联到学术论文中天书一般的公式符号?密码学工程中,有哪些特有的数据编解码方式、存在哪些认知误区和注意事项、需要克服哪些限制和挑战?

     

    作为支撑隐私保护方案的核心技术,如何运用数据编解码,将密码学论文中抽象的数学符号和公式具象成业务中具体的隐私数据,是学术成果向产业转化需要跨过的第一道门槛。

     

    学术论文中所使用的数学语言与工程中所使用的代码编程语言,差异非常大。不少在数学上容易定义的属性和过程,若要在工程上提供有效实现,颇具挑战。实现不当的话,甚至可能破坏学术方案中的安全假设,最终导致方案失效、隐私数据泄露。

     

    常用的密码学算法拥有多种标准化编解码方式,其应用到隐私保护方案,可以分别解决相应问题。以下将逐一展开。

     

    业务应用难题:类型不匹配

    工程实现之道:数据映射

     

    在实际业务中,隐私数据可以表现为五花八门的数据类型,这些类型通常不满足密码学协议中特定的类型要求,无法被直接使用,这就是我们需要解决的第一个问题:数据类型不匹配。

     

    例如,业务系统中,交易的金额是一个长整型整数,而常见的密码学算法可能要求输入为有限循环群中的一个元素,如果直接使用长整型整数的值,可能该值并不在对应的有限循环群中;在椭圆曲线系统中,单个数值还需要转化成曲线上的点坐标,需要将一个数值转化成两个数值的坐标形式。

     

    针对以上问题,密码学工程实现中,一般通过数据映射进行类型转换处理。具体而言,是将用户的隐私数据,通过一定的方法,变换到具体密码协议要求的数据类型。

     

    下面以密码学中的椭圆曲线(Elliptic Curve)加解密为例,介绍一种常见的数据映射方式。

     

    椭圆曲线可以简单理解为定义了一个特定点的集合,例如下面这种公式定义了比较常见的一类椭圆曲线:

     

     

    其中满足公式成立的点(x, y)都在椭圆曲线上。椭圆曲线密码通过在限定的点集上定义相关的点运算,实现加解密功能。

     

    在椭圆曲线加解密过程中,首先面临的问题是『如何将待加密的数据嵌入到椭圆曲线上,通过点运算来完成加密操作』。这需要将明文数据m映射到椭圆曲线上的一个特定点M(x, y)。

     

    数据编码方式是将明文数据m通过进制转换到椭圆曲线上某点的x坐标值,然后计算m^3 + am + b的完全平方数,得到y,这样就将m转换到了点M(x, y)。

     

    数据解码方式比较直白,解密还原出明文数据点M之后,读取M的x坐标值,再通过进制转换还原为明文信息m。

     

    然而,密码椭圆曲线是定义在有限域上的,即曲线上是一个离散的点集合。这样会导致计算完全平方数不一定存在,即x没有对应的y在椭圆曲线上,那么,部分明文数据无法转换到椭圆曲线上的点,从而导致部分数据无法被直接加密。

     

     

    在实际工程化的方案中,为了保证椭圆曲线加解密的可用性,会加入其它更复杂的扩充编码机制,以应对明文数据转换失败的情况。

     

    一般而言,密码学协议中所定义的类型要求越多,数据映射的工程实现也会越复杂,如果缺乏高效的数据编解码算法和配套的硬件优化支持,即便密码学协议的理论计算复杂度再低,最终也是难以实用化。

     

    具体的数据映射涉及到很多流程细节和算法参数,一旦存在微小的差异,由不匹配的编码算法所产生的数据,都会极大概率无法解码,导致隐私数据丢失、业务中断。

     

    所以,在具体工程实现时,数据映射需要严格按照已有工程标准的实现要求,以国密SM2为例,可以参考GM/T0009-2012《SM2密码算法使用规范》、GM/T0010-2012《SM2密码算法加密签名消息语法规范》等一系列相关技术标准。

     

    业务应用难题:数据太长

    工程实现之道:数据分组

     

    除了类型不匹配,密码学协议中使用的核心算法对输入的数据长度往往也有一定要求。但在实际应用中,需要处理源自不同业务需求的隐私数据,难以限定其长度,难免会出现数据长度超出核心算法处理长度的情况。

     

    例如,对称加密AES算法AES-128、AES-256,表明其使用的密钥位数分别是128位和256位,但加密过程中单次进行核心密码运算时处理的数据固定为128位。

     

    针对以上问题,密码学工程实现中一般通过数据分组进行处理,即化整为零,将长数据切分为多个较短且符合长度要求的数据块。

     

    典型的例子是分组加密,例如AES、DES等。分组加密顾名思义就是,将输入的数据分组为固定长度的数据块,然后以数据块为单位作为核心密码算法的处理单元进行加解密处理。

     

    为了在数据分组之后,依旧保持方案的安全性,数据分组技术不仅仅是简单地对数据进行划分,还需要引入额外的流程操作。

     

    下面以AES 256位密钥加密为例,介绍其中典型的分组加密模式ECB、CBC和CTR。

     

      ECB模式 (Electronic Code Book)

     

    ECB是最简单的分组加密模式,也是不安全分组模式的典范。

     

    假定有1280位待加密的数据,ECB模式将其平均分为10个128位数据块。每个数据块使用相同的密钥单独加密生成块密文,最后块密文进行串联生成最终的密文。 

     

     

    ECB模式的加密特点是在相同的明文和密钥情况下,其密文相同,因此泄露了明文数据与密文数据之间的关联性,不推荐用于任何隐私保护方案中。

     

      CBC模式 (Cipher Block Chaining)

     

    CBC模式通过前后数据块的数据串连避免ECB模式的缺点。

     

    与ECB模式类似,CBC模式中,每个明文块先与前一个密文块进行异或后,再进行加密。在这种方法中,每个密文块都依赖于它前面的所有明文块。同时,为了保证每个数据密文的随机性,在第一个块中需要使用一个随机的数据块作为初始化向量IV。

     

     

    CBC模式解决了ECB模式的安全问题,但也带来了一定的性能问题。其主要缺点在于每个密文块都依赖于前面的所有明文块,导致加密过程是串行的,无法并行化。

     

      CTR模式 (CounTeR)

     

    CTR模式的出现让分组加密更安全且并行化,通过递增一个加密计数器以产生连续的密钥流,使得分组密码变为流密码进行加密处理,安全性更高。

     

     

    CTR加密和解密过程均可以进行并行处理,使得在多处理器的硬件上实现高性能的海量隐私数据的并发处理成为了可能,这是目前最为推荐的数据分组模式。

     

    密码学协议中的数据分组与传统大数据处理中的数据分组有很大区别。理想情况下,数据分组不应该弱化隐私保护的强度,不能为攻击者获取未授权的信息提供可乘之机。这往往会涉及精心的数据分组方案设计,不能简单看作是数据分块之后的批处理。

     

    业务应用难题:数据太短

    工程实现之道:数据填充

     

    数据太长是个问题,数据太短往往也是问题。

     

    在以上分组处理的过程中,最后一个数据块中数据长度不足,密码学协议中的核心算法也可能无法工作。

     

    假定一个密码协议处理的数据块长度要求为6字节,待加密的隐私数据长度为7字节。用两个十六进制数代表一个字节数据,其示例如下:

    b1 b2 b3 b4 b5 b6 b7

     

    7字节长于数据块的处理长度6字节,因此该数据将被分组,且可以分为两个数据块。分组示例如下:

    第一个数据块:b1 b2 b3 b4 b5 b6

    第二个数据块:b7

     

    其中第一个数据块刚好是6个字符,第二个数据块只有1个字节,这个数据块就太短了,不满足处理要求。

     

    针对以上问题,密码学工程实现中一般通过数据填充进行处理,即将短的数据块填充补位到要求的字节长度。示例中第二个数据块需要进行数据填充,为其补上缺少的5个字节。 

     

    与数据分组类似,这里的数据填充也不是普通的数据填充,也应该满足一定的安全性要求。最常用的数据填充标准是PKCS#7,也是OpenSSL协议默认采用的数据填充模式。

     

      PKCS#7填充

     

    需要填充的部分都记录填充的总字节数。应用于示例中第二个数据块,则补5个字节都是5的数据,其填充效果如下:

    b7 05 05 05 05 05

     

    这里还存在一个问题:如果一个隐私数据的最后一个分组,刚好就是一个符合其填充规则的数据,在事后提取原始数据时,如何分辨是原始数据还是填充之后的数据?

     

    避开这种歧义情况的关键是,任何长度的原始数据,在最后一个数据块中,都要求进行数据填充。

     

     

    值得注意的是,对隐私数据加密时,按特定填充模式进行处理,那么填充的数据也将被加密,成为加密前明文数据的一部分。解密时,其填充模式也需要和加密时的填充模式相同,这样才可以正确地剔除填充数据,提取出正确的隐私数据。

     

    在隐私保护方案的编解码过程中,以上提到的数据映射、数据分组、数据填充,都是保证隐私数据安全的必要环节。此外,在特定的合规要求下,实际业务系统还需要引入更多的相关数据预处理环节,如数据脱敏、数据认证等,使得数据在进入密码学协议前,尽早降低潜在的隐私风险。

     

     

    正是:理论公式抽象赛天书,工程编码巧手点迷津!

     

    学术论文的公式符号与隐私保护方案的可用工程实现之间,存在一条不小的技术鸿沟,而密码学特有的数据编解码,正是我们建立桥梁实现学术成果产业转化的基石。

     

    安全高效的数据编解码技术,对于处理以5G、物联网为爆点的海量隐私数据应用意义重大,是隐私数据进出业务系统的第一道防线,其重要性不亚于其他密码学原语。

     

    了解完数据编解码之后,接下来将进入具体应用相关的密码学原语,欲知详情,敬请关注下文分解。

     

    展开全文
  • 在2.0版或更高版本中使用的密码库为botan。 该库是用GNU automake构建的。 去做: 实施ARGON2 实施SCRYPT Botan不提供ARGON2和SCRYPT,因此必须使用外部库。 将来,可能会在某个时候添加对OpenSSL的支持。 但是...
  • rust-djangohashers:Django项目中使用的密码原语的Rust端口
  • 为此,密码学领域提出了一系列基本组件,即密码原语(Cryptographic Primitive)来实现这一目标,其中最常用的便是单向哈希。 在区块链中,单向哈希能够链接多个区块数据,形成可信的链式数据结构,在弱信任...

    隐私数据如何验明真伪?区块链数据何以可信?如何快速检验海量数据是否被篡改?单向哈希在其中起到了什么作用?

     

    隐私数据的价值很大程度上源自其真实性,如何防止数据被恶意篡改,是隐私保护方案设计中不可忽视的关键目标之一。为此,密码学领域提出了一系列基本组件,即密码学原语(Cryptographic Primitive)来实现这一目标,其中最常用的便是单向哈希

     

    在区块链中,单向哈希能够链接多个区块数据,形成可信的链式数据结构,在弱信任环境下,提供防篡改且经过多方共识的可信数据源。

     

    这一特性对隐私保护方案的设计意义重大。隐私数据往往以密文形式表达,需要快速检验海量隐私数据的真伪,查验是否被恶意篡改。此时,单向哈希作为一项关键技术,大有用武之地。

     

    为何单向哈希如此神奇?其常见的用法有哪些?又能具体解决哪些问题?以下将据此一一展开。

     

    单向的哈希算法

     

    哈希算法是信息科学中的基础算法组件,“快速实现数据比较和效验”是其设计初衷之一。

     

    现实业务场景中,可能会涉及海量隐私数据,逐一比对数据原文,在很多场景中非常不现实,尤其是需要通过网络传输的数据,会大大增加网络带宽的负担。

     

    哈希算法的出现,使得高效的数据验证成为了可能。

     

    哈希算法的核心功能为,将任意长度的输入m映射为固定长度的输出H(m),H(m)常称为哈希值、散列值或消息摘要。

     

    一个精心设计的哈希算法具有以下特征:

    • 输出确定性:同一种哈希算法,相同的输入,其输出固定不变。

    • 输出长度不变性:同一种哈希算法,针对任意长度的输入,其输出长度不变。

    • 输入敏感性:同一种哈希算法,即便输入数据有微小的改变,其输出哈希值也会发生巨大变化。

     

    因此,只要比较数据的哈希值是否与预期的一致,就能大概率地判别隐私数据原文是否被篡改。其典型的实现有:各大主流编程语言中,HashMap数据结构所使用的哈希算法。

     

    然而,只是大概率,在密码学协议中是不够的。我们需要更强的哈希算法,将实际的检验概率提升至接近100%。

     

    与之对应的一个重要概念是『哈希碰撞』。哈希碰撞是指,存在两个不同的数据原文m1和m2,其哈希值完全相同,即H(m1) = H(m2)。

     

    容易出现哈希碰撞的哈希算法在密码学协议中不安全,同时,密码学还进一步引入了单向性的要求。

     

    一个密码学安全的哈希算法,在传统哈希算法的基础上,还需满足以下特性:

    • 单向性:根据数据原文计算哈希值很容易,但要求难以根据哈希值计算数据原文,提供计算上的不对称性,以此防止攻击者轻易地从哈希值反推出可能的隐私数据原文,保护哈希值的机密性。

    • 抗碰撞性:给定任意两个不同的数据原文,要求它们经哈希算法计算后得到相同哈希值的概率极低,以此防止攻击者轻易地为篡改之后的隐私数据原文构造出合法的哈希值,确保数据检验的有效性。

     

    以上两个特性,赋予了密码学安全的哈希算法对数据内容公开可验证的约束能力。这一约束能力使得经过单向性转换获得哈希值,在一定程度上可以作为隐私数据原文的等价信息

     

    在隐私保护方案设计中,哈希算法的单向性是最常用的特性之一。相应地,密码学安全的哈希算法也常被称之为单向哈希

     

    目前主流的单向哈希有如下算法标准:

    • NIST标准:SHA(Secure Hash Algorithm)系列是由美国国家标准技术研究院(NIST)制定的SHA哈希算法系列,主要包括SHA-1、SHA-2和SHA-3三个系列。SHA-1由于安全问题已不再使用

      SHA-2系列包括SHA-224(表示哈希值长度为224位)、SHA-256、SHA-384、SHA-512等算法,其中SHA-256是目前使用最广泛的单向哈希。

      SHA-3是最新算法标准,源自参与SHA-3竞赛的keccak算法。2015年,NIST在完成SHA-3的标准化时,调整了keccak的填充流程,因此,标准的SHA-3算法与原始的keccak算法并不兼容。

    • 国密标准:国密哈希算法SM3,是我国制定的单向哈希算法标准,由国家密码管理局于2010年12月17日发布,其安全性和效率与SHA-2系列的SHA-256相当。

     

    单向哈希的选型可以参考业务部署的地域性要求,建议在SM3和SHA-3之间做出选择,如果需要与现有系统进行兼容,也可酌情选用SHA-2系列中的SHA-256。

     

     

    链式哈希结构 

     

    单向哈希的用途很广泛,最直接的应用就是构造链式哈希结构,即大家所熟知的区块链,提供难以篡改的可信数据源。

     

     

    由于单向哈希的单向性,从结构上可以看出,从前一个数据块原文,很容易计算下一个数据块所用的哈希值输入,但已知一个哈希值输入,难以反推出所有可能的数据块原文。

     

    区块链技术结合单向哈希和共识算法,当某一区块的数据共识确认后,下一区块将会记录前一区块数据的哈希值,从而实现整条链上所有数据块的难以篡改。

     

    在隐私保护方案设计中,以区块链为代表的基于链式哈希结构的可信数据源,可以起到简化协议设计的作用,尤其对于第4论中提到的恶意模型特别有效。恶意模型下的密码学协议,为了防范内部参与者不遵守协议、随意篡改数据,不得不引入复杂的多方交互验证过程。

     

    通过链式哈希结构,在现实系统中引入一个可信数据源,可以对关键的中间流程数据进行存证和溯源,一旦有参与方作恶,便能在第一时间检测出,且定位到对应责任方,有效保障隐私保护方案全流程的正确性。

     

    哈希树

     

    单向哈希不仅仅能构造简单的链式哈希结构,还能根据业务需要扩展为更复杂的数据结构,其经典的形态之一便是哈希树。

     

    哈希树常称为Merkle Tree,最早由Ralph Merkle在1979年的专利申请中提出,为大数据量的完整性验证提供了高效灵活的解决方案。

     

    这里的完整性验证是指,核实原始数据在使用和传输的过程中没有被篡改。

     

    在真实的隐私保护业务中,隐私数据多为高价值数据,而且多以密文的形态保存和使用,一旦被篡改,在不知道明文的前提下,难以通过常规技术手段来有效识别真伪。

     

    对于涉及多方协作、联合计算的隐私保护业务,隐私数据密文交换和共享通常是其中的核心流程。所以当这些隐私数据密文跨越系统边界时,数据接收方会有两方面数据检验需求:

    • 整体完整:验证隐私数据中任意部分都未被篡改。

    • 篡改定位:如果存在攻击,能够有效定位被篡改的数据位置,便于开展应对流程。

     

    为了体现哈希树的设计优越性,我们以举例的形式展示其效果。

     

    为了简化说明,以下分析假定:

    • 发送方与接收方之间存在一个带宽有限的可信信道,如区块链上经过共识的数据,可以将简短的哈希值安全地传递给对方。

    • 隐私数据相关的原始文件由于数据量过大,不得不通过低成本低密级信道传输,如公共网络,因此可能被攻击者篡改。

     

      方案1:整体单次哈希

     

    本方案中,发送方在发送原始文件之前,将所有的原始文件数据作为哈希算法的输入,计算哈希值,然后将哈希值与原始文件均发送给接收方。

     

    当接收方收到哈希值和原始文件后,重复发送方计算哈希值的操作,然后将新计算得到的哈希值与从网络上接收到的哈希值进行比较,如果相同,就可以判断原始文件在传输过程中未被篡改。

     

      方案2:分块多次哈希 + 哈希树

     

    方案1对于满足整体完整需求十分有效,但对于第二条篡改定位需求就无能为力了。

     

    基于哈希算法的输入敏感性,接收方可以知道至少有一个比特的数据被篡改了,但不知道具体在哪里。发送方不得不对所有数据进行重发,在这种情况下,攻击者很容易对隐私保护方案实施拒绝服务攻击。

     

    为了解决这一点,本改进方案中,将原始文件分成一系列数据块,为每一个数据块分别计算哈希值。接收方验证的过程与方案1相似,区别在于可以对具体的数据块进行验证,一个数据块被篡改,导致的哈希值不匹配不会影响到其他数据块的验证,由此实现了篡改定位需求。

     

    这里中间缺了关键的一步,即如何高效灵活地传输这些哈希值,并在原始文件很大时,灵活支持部分数据的获取和验证?

     

    解决这些问题的要点,在于利用好哈希树的特性。

     

     

    哈希树中,最底层的叶子层是各个数据块的哈希值,往树根的方向迭代哈希计算。即把相邻的两个节点的哈希值串连之后,再进行哈希运算,这样每两个哈希值就生成一个新的哈希值,重复以上计算过程,直到仅剩下一个哈希值(根哈希),最终形成一棵倒挂的树。

     

    在哈希值传输方面,接收方只需要通过可信信道下载一个根哈希,其他数据都可以通过低成本低密级信道传输。

     

    在支持部分数据的获取和验证方面,接收方只需要获取所需的部分数据块、根哈希,途经分支节点的哈希值,以O(log(n))的时间复杂度便可完成数据的验证,并实现被篡改数据块的快速定位。

     

    除了哈希树之外,根据业务需求的差异,单向哈希还能用于构造有向无环图等更复杂的数据结构。一般而言,其作用相当于连接各个数据点的锁扣,为相关数据建立公开可验证的密码学约束,使之难以被篡改,以此保障数据的正确性。

     

     

    正是:隐私数据真假难分辨,单向哈希守正不轻挠!

     

    单向哈希是密码学中处于核心地位的密码学原语,可用于构建难以篡改的可信数据源、高效灵活的数据完整性验证机制等,以此来保障隐私保护方案中隐私数据的正确性。

     

    本论中,我们介绍了单向哈希的基础应用,在往后的文章中,我们还会进一步介绍单向哈希的高级应用,包括构造密码学承诺、零知识证明等。

     

    同时,作为密码学中久经考验的基本组件,除了单向哈希,密码学原语还包括数据编解码、对称加密、非对称加密、数字签名等,基础密码学原语还能进一步组成更高级的密码学组件。在这一系列中,我们将逐一展开与隐私保护密切相关的密码学原语的分享,欲知详情,敬请关注下文分解。

     

    展开全文
  • Rust DjangoHashers Django项目中使用的密码原语的Rust端口。 Django的django.contrib.auth.models.User类具有一些用于Rust的方法DjangoHashers Django Project中使用的密码原语的Rust端口。 Django的django.contrib...
  • 一个纯Rust库,该库实现一组密码原语以构建多跳代理重新加密方案,称为“转换加密”。 什么是转换加密? 假设您有两个(公用,专用)密钥对: (A,AA)和(B,BB) 。 变换加密允许加密的一个公共密钥(A)的...
  • 关于强化随机抽取器的泄漏复原力,以实例化具有复原力的密码原语
  • 其背后的同态性原理具体指什么?半同态性和全同态性有什么区别?单密钥和多密钥同态加密有哪些奇妙的应用场景? 隐私保护方案设计,往往需要在密文状态下,对隐私数据进行特定的业务操作,以此保障数据的机密性。...
  • 区块链是一个基于密码学、经济学和网络科学的新技术。对于一般的大众来说,其中的密码学并不是一门容易亲近的学科,甚至是上面提到的...密码学为什么对区块链技术至关重要? 区块链的哪些地方用到了密码学? 首先,如
  • 其背后的同态性原理具体指什么?半同态性和全同态性有什么区别?单密钥和多密钥同态加密有哪些奇妙的应用场景?隐私保护方案设计,往往需要在密文状态下,对隐私数据进行特定的业务操作,以此保障数据的机密性。沿用...
  • 隐私保护方案的工程实现,如何关联到学术论文中天书一般的公式符号?密码学工程中,有哪些特有的数据编解码方式、存在哪些认知误区和注意事项、需要克服哪些限制和挑战?作为支撑隐私保护方案的核心技...
  • 随着其应用越来越广泛, NIST于2019年提议对门限密码学相关的密码原语进行标准化,分别从单一主体使用和多方协作使用两个方向,对门类众多的门限密码学方案进行归类和标准化尝试。 在标准化完成之前,根据具体的...
  • ​作者:廖飞强 来源:微众银行区块链 ​隐私数据如何验明真伪?...为此,密码学领域提出了一系列基本组件,即密码原语(Cryptographic Primitive)来实现这一目标,其中最常用的便是单向哈希。 在区...
  • 同时,举例说明了分组密码,如DES和AES的设计原则,并且在低级原语层面展示了分组密码的可证明安全构造方法。《现代密码学:原理与协议》下半部分介绍公钥密码学。首先对数论知识进行了介绍,这些知识是理解RSA、...
  • 在工作室格式中,团队项目需要设计选定的密码原语,然后比较和对比各种实现替代方案,例如软件、定制 FPGA 硬件和混合软硬件协同设计。 项目团队最好由一名计算机工程专业的学生和一名软件工程或计算机科学专业的...
  • 默认情况下,使用AES-GCM,BCrypt和HKDF作为加密原语。 重要说明:如果您迁移到v0.6.0并使用用户密码,并且由于安全问题,则需要迁移默认的密钥扩展功能。 请参阅 特征 无Nonse国家的最先进加密:加密认证与 - ,...
  • 它包括基本密码(AES,3DES,RC4,ChaCha20 / Poly1305),哈希(MD5,SHA1,SHA2系列),AEAD原语(AES-GCM,AES-CCM),公钥原语(RSA,DSA,DH)和强大的RNG(Fortuna)。 RSA定时攻击通过盲目应对。 通过委派...
  • Jonathan Katz 密码学ppt

    2019-03-22 09:35:54
    理解密码学的核心关键在于理解密码学里面几个最重要的原语(primitives):单向函数、对称加密算法和非对称加密算法,外加一个随机性的概念,这四个东西搞清楚了以后,整个现代密码学的体系才有可能真正去理解它。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,715
精华内容 1,486
关键字:

密码原语什么意思