密码摘要公约 0.2.0
此包供 SHA-256 之摘要与尽力恒时之比文。惟司摘要与比较,不自许口令贮藏或消息认证之安;盐、口令派生与凭据之期,仍由客另定(口令派生见[口令派生](../口令派生/规范.文言.md))。
摘要
摘要SHA256十六进制 以所入字符串之 UTF-8 原字节求 SHA-256,返恰六十四位 ASCII 小写十六进制字符,无首饰、盐与终行。摘要SHA256字节十六进制 于任意字节串(可含零字节,不作文字解)为同一之算,返同形之六十四字符;同一段字节,二术之果必同。浏览器、CF Worker、节点及原生诸适配,同入须同果。入空亦可。入不得逾十六 MiB(宿主值桥之限),逾者或宿主密码原语败,则调用败,抛豫言之异。
恒时相等文字
恒时相等文字 较二字符串之 UTF-8 字节,同则阳,异则阴。长(以字节计)异,径返阴——许泄其长;长同则遍历诸字节而积其差,循环之数惟系于长,不因首异而止,亦无系于字节值之分支(差以平方相积,尽为零乃相等)。用以比令牌、摘要诸秘值,免逐字符比较因早退而生之时序差。
此乃尽力恒时之豫言实现:不用宿主专有之函(如 Workers 之 timingSafeEqual),编译器与宿主不保严格恒时。欲得严格恒时之保者,当于宿主层为同类之比。
同一之例
摘要SHA256十六进制 "abc"与摘要SHA256字节十六进制("abc" 之 UTF-8 字节)皆为ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad;入空得e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855。摘要SHA256字节十六进制于00 ff 01 fe 00 00 80 7f 00及零至二百五十五之全部字节值,各与标准实现同。恒时相等文字 "" ""为阳;"abc" "abc"为阳;"abc" "abd"、"abc" "Abc"、"abc" "abcd"、"" "a"为阴;汉字文同为阳、差一字为阴;字节数同而内容异(如甲与abc)为阴。
界
此包不供 HMAC、他散列之法、盐或口令之贮;不保 恒时相等文字 能御微架构层面之侧信道。