C/S模型安全登录解决方案
来源:互联网 发布:vscode错误提示 编辑:程序博客网 时间:2024/05/01 08:12
身为信息安全专业的,还是写点与专业相关的博文吧。。嗯。
一般在C/S软件中,登录流程都设计的很复杂,比如QQ。一方面为了防止伪造客户端,而另一方面更重要的则是对信息加密,防止明文被截取。
下面介绍一种比较好的解决方案。
首先,加密算法首当其中选RSA了(因为每门专业课都要考它。。),先简单介绍下RSA原理:
RSA的安全性依赖于大数分解。公钥和私钥都是两个大素数( 大于 100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度等同于分解两个大素数的积。
密钥对的产生。选择两个大素数,p 和q 。计算:
n = p * q
然后随机选择加密密钥e,要求 e 和 ( p - 1 ) * ( q - 1 ) 互质。最后,利用Euclid 算法计算解密密钥d, 满足
e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) )
其中n和d也要互质。数e和n是公钥,d是私钥。两个素数p和q不再需要,应该丢弃,不要让任何人知道。
加密信息 m(二进制表示)时,首先把m分成等长数据块 m1 ,m2,..., mi ,块长s,其中 2^s <= n, s 尽可能的大。对应的密文是:
ci = mi^e ( mod n ) ( a )
解密时作如下计算:
mi = ci^d ( mod n ) ( b )
RSA 可用于数字签名,方案是用 ( a ) 式签名, ( b )式验证。具体操作时考虑到安全性和 m信息量较大等因素,一般是先作 HASH 运算。
OK,我们接下来的讨论假设公钥e,n已知,私钥d也已知。
然后直接用它们对客户端输入的密码加密就行了吗?显然不行,那样攻击者截获密文后不用解密,直接发给服务器照样可以验证通过。
在认证过程中加入随机数认证是比较普遍的解决方案,接下来我把详细过程写一下,参考的是marauroa,一个开源网游服务器代码。
1,客户端发送LoginRequestKeyMessage,告诉服务器自己准备登陆,并期望得到公钥。
2,服务器收到LoginRequestKeyMessage后,发送公钥key给客户端。
3,客户端保存公钥key后随机生成一个大整数,并将hash后的值clientNonce发给服务端。
4,服务端收到clientNonce,并随机生成一个大整数,然后照样将它hash后的值serverNonce发给客户端。
5,客户端收到serverNonce,此时此刻,客户端和服务端都有了一致的【clientNonce,serverNonce】且这对值每次登陆都不一样,因为都是由随机大整数hash而来。
好了,一切准备就绪,接下来就是客户端对输入密码的加密发送了,首先XOR(clientNonce,serverNonce),异或后的值存入b1。
然后XOR(b1,hash(password)),异或后的值存入b2。
然后用公钥加密b2,得到cryptedPassword后发送给服务器。
6,服务器收到cryptedPassword,嗯,【clientNonce,serverNonce】知道,私钥知道,怎么得到hash(password)应该很简单了吧,然后就是查询数据库验证,OK。
嗯,over了,仔细看看,要想破解,几乎是不可能的事情。
PS:最近应付考试,随便写点,俺密码学完全是菜鸟,仅供参考。。:)
- C/S模型安全登录解决方案
- python C/S模型
- C/S模型
- C/S通讯模型
- C-S基本模型
- C/S模型-TCP
- 登录注册系统,前端密码安全解决方案
- c/s下登录制作
- C/S模型---TCP方式
- C/S模型---UDP方式
- TCP C/S 多线程模型
- C/S通信模型与B/S通信模型介绍
- C/S通信模型与B/S通信模型介绍
- 服务器模型——C/S模型和P2P模型
- 网上汇市登录系统信息安全的一个解决方案
- 安全登录的跨平台解决方案V1.1
- [asp.net]登录协同工作平台安全解决方案
- [Asp.Net]登录协同工作平台安全解决方案(优化版)
- struts2标签详解
- 优秀网站源码、编程源码下载网站
- Symbian Capability 表
- Web Performance工具 - HTTPWatch
- c 动态添加控件
- C/S模型安全登录解决方案
- web 前端实现
- 中国地理知识集锦
- 在MS Windows上安装、使用 ntop 及 Wireshark 来侦测网路异常流量
- 第一次装javaIDE,问题一大堆。
- 中国地理知识大全(转载)
- 中国地理知识
- FZU 1148 Crossed ladders
- 数据库设计之概念模型ER关系图