java 板


LINE

※ 引述《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版本识别字串 一个明码封包, 格式如下 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 但为了第三个步骤的验证, 我建议你可以双方互传一组随机的变数byte array 例如Server传出: FFAAFFAAFFAA Client传出: 001100110011 (每次连线初始化都随机产生) (以SSHv2而言是16个byte的cookie) 3. key exchange 这部分有点杂, 但J2SE有API可以用, 如果你考虑到完整的安全性, 可考虑SSH 的RFC文件 (没记错是4253) 以下S是指Server, C为Client p为一个非常大的质数,心情好的话可以自己选,心情不好就用Second Oakley Group 那个数字很大, 所以麻烦自己去goo一下那个数字, 一大串的16进位用BigInter存 q别管他, 总之q别比p还大 (会怕的话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), Hash function则为SHA-1 以你的case而言H结构双方是要相同的, 且一定要包含步骤2的随机数,及步骤1个 识别字串,其他结构随你心情增减, 这个H最主要用处在於验证你步骤1到3是在跟同一台机器对话 4. S在这个H上用自己的private key来sign, sign完的资讯假设为s 并将刚刚计算出的f, public key, 及签完的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. 计算u2=(rw) mod q 4. 计算v=(((g^u1)(y^u2)) mod p ) mod q 5. 这时候你可以松开你的LP, 比对看看v是不是等於r, 成立则得证, 反之则继续握着LP来debug note:这种计算方法没必要去算v大於r多少, 就算预期s跟实际的s只差1个bit v还是会跟r差距非常地大, 这种比较是没意义的, 只有两种状况: 等於或不等於 没有"差不多"这回事 ok 这个步骤之後, 你就得到一个双方都拥有的share key K, 就用这个K来加密即可 必要的话可以再对这组key做一点处理, 如果要用DES-CBC的话必须用这组key再生出 几组init.用的KEY, 这部份我不是记得那麽清楚了, 所以就不乱唬烂了 以上如果你很有耐心的看完了, 那我相信你有了一点基本的认知, 那你可以开始去找 可以用的API来用, 也不用握着LP写程式 我在手机上run的经验来说, 因为我没建public key认证机制, 所以每次连线都 要重新沟通, 但以实际上机测试效果来说, 顶多delay约3秒而已, 模拟器基本上 也不太会有太严重的delay, 你可以放心的使用, 只要在加解密的演算法上小心点 就好. 另外补充一点, 安全与效能一定是天秤的两端, 就目前的技术而言, 要安全势必会降低部分的效能, 要效能就一定要牺牲掉安全性 很明显的例子就是SSH跟TELNET, 如果ptt大家都用SSH来连, 那势必会造成机器 相当可观的负担. 一点点经验与您分享, 希望能给您一点点帮助, 虽然有点离题XD --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.175.27.54
1F:→ mc18:对不起错字有点多 懒得改了@@ 看不懂再问吧 @@ 03/12 00:57
※ 编辑: mc18 来自: 218.175.27.54 (03/12 01:11) weii:转录至看板 SFFamily 03/12 15:31 ※ 编辑: mc18 来自: 218.175.27.54 (03/13 00:14)
2F:→ mc18:错字"理论上"改完了 03/13 00:15







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灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP