加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

淘宝村玩转大数据

发布时间:2021-02-06 18:37:51 所属栏目:传媒 来源:互联网
导读:那么,要解决这一问题,就需要一种机制,来同步两个不同核心里面的缓存数据。要实现的这个机制的话,要保证做到下面这 2 点: 第一点,某个 CPU 核心里的 Cache 数据更新时,必须要传播到其他核心的 Cache,这个称为写传播(Wreite Propagation); 第二点,某

那么,要解决这一问题,就需要一种机制,来同步两个不同核心里面的缓存数据。要实现的这个机制的话,要保证做到下面这 2 点:

  • 第一点,某个 CPU 核心里的 Cache 数据更新时,必须要传播到其他核心的 Cache,这个称为写传播(Wreite Propagation);
  • 第二点,某个 CPU 核心里对数据的操作顺序,必须在其他核心看起来顺序是一样的,这个称为事务的串形化(Transaction Serialization)。

第一点写传播很容易就理解,当某个核心在 Cache 更新了数据,就需要同步到其他核心的 Cache 里。

而对于第二点事务的串形化,我们举个例子来理解它。

假设我们有一个含有 4 个核心的 CPU,这 4 个核心都操作共同的变量 i(初始值为 0 )。A 号核心先把 i 值变为 100,而此时同一时间,B 号核心先把 i 值变为 200,这里两个修改,都会「传播」到 C 和 D 号核心。

 

时如果 A 号核心执行了 i++ 语句的时候,为了考虑性能,使用了我们前面所说的写回策略,先把值为 1 的执行结果写入到 L1/L2 Cache 中,然后把 L1/L2 Cache 中对应的 Block 标记为脏的,这个时候数据其实没有被同步到内存中的,因为写回策略,只有在 A 号核心中的这个 Cache Block 要被替换的时候,数据才会写入到内存里。

如果这时旁边的 B 号核心尝试从内存读取 i 变量的值,则读到的将会是错误的值,因为刚才 A 号核心更新 i 值还没写入到内存中,内存中的值还依然是 0。这个就是所谓的缓存一致性问题,A 号核心和 B 号核心的缓存,在这个时候是不一致,从而会导致执行结果的错误。
 

正常情况下,X509 证书解析与算法都被实现为独立的模块。正是由于 SM2 的这个规范会导致实现上的强耦合:X509 证书验证时需要计算证书中 tbs 的 SM3 哈希,这个哈希同样需要椭圆曲线参数以及公钥数据,而这些数据是一次完整 SM2 验签过程中的临时数据,目前的内核中并没有提供这样的回调机制(当然这是 SM2 的特殊情况),这就把 X509 证书解析与 SM2 算法强绑到了一起,没法解耦。

这也导致了应用该功能的一点限制,SM2 只能支持内建编译(Y),而不支持编译成模块(M),让 X509 在编译时就知道已经支持 SM2,才能正常验签国密证书。从实现上看,也有一些动态加载 SM2 模块获取获取函数指针的方法,相比于框架层的支持,都不是很友好。

IMA 签名在计算文件哈希的时候,内核是直接计算文件哈希的,这块并没有针对是否使用 SM2 签名而做特殊处理(指上图中的增加 Za 值)。当下内核做的 IMA 国密签名验证的支持,同时也支持了 ima-evm-utils 的国密 sm2+sm3 签名(依赖最新的 openssl),目前这块都是直接计算文件哈希,没有加 Za 值,这也是当下最优的方案。

需要说明的一点是,Za 是国密签名以及验签里要求的,只是签名验签的流程里需要,但是国密这个流程跟目前主流的算法是相悖的,如果要支持,内核和 ima-evm-utils 工具都需要较大修改,内核要涉及到架构修改,社区也不愿意接受,所以目前就按主流方式支持了 sm2+sm3 的 IMA 签名。

总而言之,言而总之两条:

要支持国密证书验证,SM2 要么不编译,要么必须内建编译,不支持编译成模块。当然了,SM2 作为一个非对称算法,只签名一个哈希或者基于国密的 IMA 验证,并没有这个限制。IMA 签名工具 ima-evm-utils 以及内核计算文件 SM3 哈希所用的国密算法没有加 Za,这个是与规范的一点差异。

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读