一个关于web环境里身份验证的模型.
基于交换密钥的设计.
基于一个假设,即password是client和server才知道的.
于是,在初始的时候,client生成一个随机变量,经过单向哈希之后成为一个定长字符my_key_client.在web环境,这个产生过程在本地进行.也就是说,除非能监听到本地动作,那么my_key_client对于client之外的所有人都是不可知的.
而如果能够被监听到,那么,也无所谓安全性,因为username和password也是可被监听的,也就不需要继续将安全性谈下去了.
将password单向散列为另一个定长字符串friend_key.而此friend_key,理论上只有client和server才知道.(password只有client和server才知道)
于是,将my_key_client以friend_key作为密钥做一个对称加密,同时,将一些需要加密的信息用my_key_client加密,传送到server,server就能够逆运算出my_key_client,进而逆运算出加密内容.从而使得client的发送是只有client和server才能解密的.
有个问题,如何保证server逆运算出来的my_key_client是正确的呢?
对于对称加密算法,不同密钥可能解除不同的内容,而在以上的条件下,无法判定解出的内容即是原始的内容.
即,如何判定解出的my_key_client是原本的my_key_client.
于是,我们需要一个checksum.
checksum一个由交换内容friend_key和my_key_client拼接后,利用单向哈希生成的一个定长摘要.
这样,理论上,这个摘要依赖于my_key_client(freind_key是对方已知的),所以,某种程度上,它也是唯一的.只要解出的my_key_client和接收到的exchange_key再做一次这样的摘要运算,如果两者符合,那么可以认为my_key_client是原始的my_key_client.(无数学证明)
这样,对于client来说,可以安全地与进行身份验证.
在验证完毕之后,server是拿到了my_key_client.
也就是说,此时server拿到了除了client和server之外,无人能知的key,所以,类似client,server也可以在本地生成一个随机密钥my_key_server,同时将my_key_client作为server端的friend_key,进行如上的操作,也能达到安全的通讯.
于是,client和server可以在每一次完整的会话之后,都改变密钥,且保证了会话的次序.
因为,即便某一次,会话被劫持了,被第三方伪造了一个假的加密内容,但是,由于第三方无法找到加密用的my_key,所以,伪造的内容无法在如何一方通过checksum的认证(因为checksum必然是不匹配的),那么,除了能够保证会话的安全性之外,一旦会话被劫持,整个会话也就失效(因为任何一方都不能再正确解密内容,前面说了,正确与否在于checksum是否匹配,而checksum必然是不匹配的).
所以,基于这个模型的会话,应该是比较安全的.
至少,不会被劫持,或者在传输过程中被偷窃如何东西.
伪代码流程如下:
client:
my_key = digest(random());
friend_key = digest(password);
exchange_key = xor( my_key , friend_key );
checksum = digest(my_key + friend_key);
save_local( my_key );
send( exchange_key , checksum);
server:
receive( exchange_key , checksum );
friend_key = digest(password);
my_key_client = xor( exchange_key , friend_key );
if( digest(my_key_client + friend_key ) == checksum )
pass secure check;
my_key = digest(random());
friend_key = my_key_client;
exchange_key = xor( my_key , friend_key );
checksum = digest(my_key + friend_key);
save_local( my_key );
send( exchange_key , checksum);
else
deny acess
end-if;
client:
receive( exchange_key , checksum );
friend_key = load_loacl();
my_key_server = xor( my_key , exchange_key );
if( digest(my_key_server + friend_key ) == checksum )
pass secure check;
my_key = digest(random());
friend_key = my_key_server;
exchange_key = xor( my_key , friend_key );
checksum = digest(my_key + friend_key);
save_local( my_key );
send( exchange_key , checksum);
else
session was broken;
end-if;
server
...
2009-10-09
一个基于交换密钥的安全会话模型
订阅:
博文评论 (Atom)
爽文
去看了好东西. 坦白说,多少是带着点挑刺的味道去的. 毕竟打着爱情神话和女性题材的气质,多多少少是热度为先了. 看完之后倒是有些新的想法. 某种程度上来说,现在的年轻人或者说声音就像小叶. 只要说点贴心的话就能哄好. 也是那种可以不用很努力了. 留在自己的舒适区避难所小圈子抱团就...
-
最近尝试了下海淘. 当然,方向上来说是从国内到新加坡. 先是买了个iPhone,算上运费和双重征税,到手比官方还是便宜个一两百新的. 换算回来也不多事10%的纯粹价格因素差异. 当然,之类有电商促销的因素. 也有比较基准是新加坡Apple Store售价的原因. 但如果同样比较A...
-
这两天看完了Netflix版的三体. 某种程度上来说,完成度还是不错的. 尽管开始的时候对于第一集片头有些争论,但整体如果带入当下去看的话,还是有些梗的. 比如三体对于地球科技的发展速率的担忧,由此衍生的智子. 以及现有力量对比上的压倒性优势. 如果带入中美关系以及各自的历史阶段...
-
前几天Sora出来后才仔细看了下diffusion,发觉确实算挺取巧的. 按照naive的intuition或者说不那么现代的方式的话,可能需要segmentaion为基础的composite的方式去生成图片,即使扯点deep learning/network的,可能也是类似一些...
没有评论:
发表评论