SFFamily 板


LINE

※ [本文转录自 java 看板] 作者: mc18 (无道德事业集团) 看板: java 标题: Re: [问题] 用JCE来加密网路讯息 时间: Wed Mar 12 00:53:47 2008 ※ 引述《prodigywu (Soccer Fever)》之铭言: : 我希望server client彼此互相传递讯息前 : 都先将讯息加密传出去 : 对方收到後再解密 : 但是有点疑惑需要解答 : 我想用JCE的DES来加密 : 那我势必要把key送给对方 : 可是要怎麽样才能把key安全的送给对方呢? : 第二个问题是说 : 产生key的过程会很耗时间吗? : 我的server跟client会大量地互相交换讯息(字串的长度都不会很大) : 如果每传一个讯息就产生一个新的key : overhead会不会很大呢? : 感谢回答~ 我比较熟SSHv2 你可以考虑他的作法, 也比较多RFC可以啃, 比较不会无聊 首先SSHv2一般来说required的基本加密演算法是用3DES //************************************************************ * * 有监於有人问我说3DES跟AES哪一个才是SSH的base encrypion alg. * * 我在这附上RFC4253的部分段落: * * The following ciphers are currently defined: * * 3des-cbc REQUIRED three-key 3DES in CBC mode * blowfish-cbc OPTIONAL Blowfish in CBC mode * twofish256-cbc OPTIONAL Twofish in CBC mode, * with a 256-bit key * twofish-cbc OPTIONAL alias for "twofish256-cbc" * (this is being retained * for historical reasons) * twofish192-cbc OPTIONAL Twofish with a 192-bit key * twofish128-cbc OPTIONAL Twofish with a 128-bit key * aes256-cbc OPTIONAL AES in CBC mode, * with a 256-bit key * aes192-cbc OPTIONAL AES with a 192-bit key * aes128-cbc RECOMMENDED AES with a 128-bit key * serpent256-cbc OPTIONAL Serpent in CBC mode, with * a 256-bit key * serpent192-cbc OPTIONAL Serpent with a 192-bit key * serpent128-cbc OPTIONAL Serpent with a 128-bit key * arcfour OPTIONAL the ARCFOUR stream cipher * with a 128-bit key * idea-cbc OPTIONAL IDEA in CBC mode * cast128-cbc OPTIONAL CAST-128 in CBC mode * none OPTIONAL no encryption; NOT RECOMMENDED ***********************************************************************// 3DES是什麽? 就是DES->DES->DES key拆成三段, 各分给三段的DES去用 (先记得一个原则, DES block size = 8 byte : 64 bits) 好 SSH因为是一种protocol, 设计上会严密一点, 流程上或许会有许多你觉得不必要的 你可以自行考虑增减 1. 互丢SSH版本识别字串 一个明码封包, 其中包含protocol, 版本, 及其他, SSH所使用的识别字串如下: SSH-protoversion-softwareversion SP comments CR LF 这样可能没人看得懂, 我举个例子给您: SSH-2.0-MC18openSSH-v18 just4test <CR><LF> SSH 协定编号 版本名称及版号 空格 注记 换行(CR LF,可查ASCII表) 2. key exchange演算法沟通 双方会开始沟通所拥有的演算法及预测对方会使用的演算法, 当然这个步骤在您的 case可以直接跳过, 就假设大家都用Diffie-Hellman key exchange 以及3DES-CBC, SHA-1, DSA 但为了第三个步骤的验证, 我建议你可以双方互传一组随机的变数array 例如Server传出: FFAAFFAAFFAA Client传出: 001100110011 (每次连线初始化都随机产生) 3. key exchange 这部分有点杂, 但J2SE有API可以用, 如果你考虑到完整的安全性, 可考虑SSH 的RFC文件 (没记错是4253) 以下S是指Server, C为Client p为一个非常大的质数,心情好的话可以自己选,心情不好就用Second Oakley Group 那个数字很大, 所以麻烦自己去goo一下那个数字, 一大串的16进位用BigInter存 q别管他, 总之q别比p还大 g可以选2比较保险(如果你选用Second Oakley Group的话) [注]g全名为generator, 以目前的数学技术而言, 没有一个很明确的方法可以 找出generator, 在一个GF(p)中 (anyway, 你可以无视这句话,总之g别乱选 1. C产生一个随机数 x ( 1 < x < q)并计算出e=g^x mod p. 并将e发送给S 2. S产生一个随机数y (0 < y < q)并计算出f = g^y mod p. 3. S收到e之後, 计算e^y mod p, 并产生一个Hash H, 以你的case而言H结构双方是要相同的, 且一定要包含步骤2的随机数,及步骤1个 识别字串,其他结构随你心情增减, 这个H最主要用处在於验证你步骤1到3是在跟同一台机器对话 4. S在这个H上签上自己的private key, 并将刚刚记算出的f, public key, 及签完的sign s一起送给C 5. 在你的case中你可以在C的local database记录S的public key 在收到S传来的资讯後, 首先验证public key是否来自正确的S 6. C计算出共用金钥K, K=f^x mod p, 并用Server的public key确定sign是否正确 这六个步骤要注意的是, H必须双方自行纪录, S在这六个步骤中不会传H给C C必须自己记录好整个传输过程中的关键资讯, 并定义好双方的格式 (多一个byte都会让sign差个十万八千里) 如何用DSA验证, 我这里提供一点点演算法, 实际做法可以去goo看看 上述的第4 5步骤中收到的public key(简写为K_S)及s分别包括以下内容: s = {p|q|g|y}, 在SSH中属於mpint, 你可以定义你自己的封包格式 K_S则为一个40byte的凭证资讯(假设演算法为SHA1), 前20个byte为r 後20为s 好了, 再来握好你的LP, 参考一下以下这堆很讨人厌的演算法: 1. 计算w=(s)* mod q // *代表inverse 2. 计算u1=(H(m)w) mod q 3. 计算uw=(rw) mod q 4. 计算v=(((g^u1)(y^u2)) mod p ) mod q 5. 这时候你可以松开你的LP, 比对看看v是不是等於r, 成立则得证,反之则reject ok 这个步骤之後, 你就得到一个双方都拥有的share key K, 就用这个K来加密即可 必要的话可以再对这组key做一点处理, 如果要用DES-CBC的话必须用这组key再生出 几组init.用的KEY, 这部份我不是记得那麽清楚了, 所以就不乱唬烂了 以上如果你很有耐心的看完了, 那我相信你有了一点基本的认知, 那你可以开始去找 可以用的API来用, 也不用握着LP写程式 我在手机上run的经验来说, 因为我没建public key认证机制, 所以每次连线都 要重新沟通, 但以实际上机测试效果来说, 顶多delay约3秒而已, 模拟器基本上 也不太会有太严重的delay, 你可以放心的使用, 只要在加解密的演算法上小心点 就好. 一点点经验与您分享, 希望能给您一点点帮助, 虽然有点离题XD --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.175.27.54
1F:→ mc18:对不起错字有点多 懒得改了@@ 看不懂再问吧 @@ 03/12 00:57
※ 编辑: mc18 来自: 218.175.27.54 (03/12 01:11) -- 三月的柳絮不飞 你的心如小小的寂寞的城 我达达的马蹄是美丽的错误 我不是归人 我是马~ --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.117.169







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP