内存一致性校验( Memory Consistency Checks -- MCC )是保证zkvm在处理程序执行当中,读写的内存数据未被恶意攻击者篡改,目前主流的内存处理方式:
ROM:只读内存(例如:cairo )
RAM:随机读取内存(例如:risc0,sp1)
对于MCC常见处理方式如下
ROM(只读内存)
有两个vector,分别称为reads、writes,里面存储的数据项是item = (address,value,version)
- 将初始化的内存数据遍历,所有项均push到writes的vector中,每一项为item = (address,value,0) 即version为0
- 每次读的时候将对应的item=(address,value,version) push 到 reads 中,同时将对应item.version+1,并push到writes中
- 最后需要将writes中对应每个address的最新vesion item,都push 到reads vector中
- 此时 reads 与 writes 互为置换
示例
- 假设有初始内存数据是[ (addr1,val1,ver0), (addr2,val2,ver0), (addr3,val3,ver0), (addr4,val4,ver0) ],reads和writes数组分别都是空[]。
- 第一步将初始化的数据都push到writes中,则 writes_vector = [ (addr1,val1,ver0), (addr2,val2,ver0), (addr3,val3,ver0), (addr4,val4,ver0)]
- 读取一个值addr1,则首先需将其数据push到reads_vector中,同时需要将version+1之后push到writes_vector中,则此时 reads_vector = [ (addr1,val1,ver0) ],writes_vector = [ (addr1,val1,ver0), (addr2,val2,ver0), (addr3,val3,ver0), (addr4,val4,ver0), (addr1,val1,ver1) ]
- 假设我们只读取一次,则最后将writes中对应每个address的最新vesion item,都push到reads_vector中,则此时reads_vector = [ (addr1,val1,ver0),(addr2,val2,ver0), (addr3,val3,ver0),(addr4,val4,ver0),(addr1,val1,ver1)],writes_vector不做改变,此时reads_vector与writes_vector互为置换。
RAM(随机读取内存)
与ROM不同的是,RAM有一个校验:读取的时候,不能读取到未来写入的值。
有两个vector,分别称为reads、writes,里面存储的数据项是item = (address,value,timestamp)
- 将初始化的内存数据遍历,所有项均push到writes的vector中,每一项为item = (address,value,0) 即timestamp为0
- 读取数据的时候,将对应的item=(address,value,timestamp) push 到 reads 中,同时将对应item也push到writes中,即读的时候也写一份同样的数据到该地址
- 写入数据的时候,先将对应地址的item=(address,old_value,timestamp) push 到 reads 中,之后写入对应新的item=(address,old_value,timestamp) push 到 writes 中,即写的时候先读。
- 最后需要将writes中对应每个address的最新timestamp item,都push 到reads vector中
- 此时 reads 与 writes 互为置换
- 对于相同地址的读取,需要保证其读取时的timestamp 大于该地址在此次读取前最后一次写入时的timestamp,该校验可以通过lookup实现,即读取时的timestamp t_r减去写入时的timestamp t_w在表[1.....T]中,T代表整个timestamp的长度
示例
同ROM类似,只不过写入的时候,需要先将对应地址的item=(address,old_value,timestamp) push 到 reads 中,之后写入对应新的item=(address,old_value,timestamp) push 到 writes 中,即写的时候先读一次。(如果该内存未初始化,需要先写入一个默认值push到writes vector中,之后再进行写入的操作)
文章评论