我希望从主键为许多客户端派生会话密钥。假设我以以下方式为客户端n派生了一个键:
master_key =HKDF-萃取物(盐,IKM)
key_client_n =香港发展基金-扩展(master_key,info_client_n,L)
然后,我为客户机n生成会话密钥:
key_client_n_session_0 =香港发展基金-扩展(key_client_n,0,L)
key_client_n_session_1 =香港发展基金-扩展(key_client_n,1,L)
这安全吗?使用香港发展基金的方法是否正确?我正在连接两个阶段的扩展以生成会话密钥。
发布于 2023-04-18 17:30:49
这安全吗?
安全适用于系统,而不是单独使用算法。
使用香港发展基金的方法是否正确?
似乎是这样的,是的。
HKDF将Info参数指定为字符串,它们指的是一个八进制字符串。目前您已经指定了一个数字值。但是,您还应该指定一种将其转换为八进制字符串的方法。
您还没有指定info编码,但这并不难,您可以使用"client" | 64 bit client number作为客户端密钥,"session" | 64 bit client number用于会话密钥。标签"client"和"session"可以使用ASCII进行编码。该数字可以按网络顺序编码为64位无符号值。
我们经常使用多个会话密钥,例如一个用于发送和一个用于接收,可能用于MAC生成或密钥确认(确认双方都有预期的密钥而不必发送特定的消息,例如通过会话记录的MAC )。您也可以为此添加一些上下文,例如"session_send"和"session_receive" (等)。而不是现在的标签。
大小显然应该与客户端和/或会话的可能数量相关联。不过,这需要防止对手故意增加会话计数器;64位或更大的值将需要较少的安全性假设。
因此,虽然不是不正确,但我不认为它是完整的。
我正在连接两个阶段的扩展以生成会话密钥。
一般都没问题。
对于一个系统来说,除了对键控材料的依赖外,使用双棘轮以提供前向安全性可能更有意义。
https://crypto.stackexchange.com/questions/106141
复制相似问题