`
milk_36
  • 浏览: 120690 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SRP6 java版本 密码验证

阅读更多

在游戏账号登陆过程中,我们需要对账号密码做验证的同时,还要防止有可能被黑客截取协议数据,盗取账号密码.通常会要使用一些加密算法和协议防止密码的泄漏.

在这里要推荐的就是SRP6.

SRP全称Secure Remote Password(安全远程密码).使用SRP的客户机和服务器不会在网络上传送明文密码,这样可以消除直接密码嗅探行为,另外使用高强度的算法保证了不可能使用字典法攻击嗅探到的数据.

开源的MaNGOS-Zero也使用的是这个算法做账号密码的校验:

http://www.cnblogs.com/ychellboy/archive/2011/10/30/2229509.html


而在这里要说的就是SRP的java版本

http://www.jordanzimmerman.com/index.php?n=2


首先下载 SRP Library. 得到SRP_1_0.zip,里面有三个目录

+doc

+example

+src


想必大家都知道接下来要干什么了,直接运行里面的example看看到底怎么使用srp

example.java里面很直观的告诉了我们要如何操作srp做加密和验证


运行它的main方法,输入help

 

 

Mode must be one of the following values:

password: outputs a verifier (v and s) for the given password.

server: runs an example server (that repeats all lines sent to it). You will be asked for the server port and the v and s values.

client: runs an example client (that sends lines to the server). You will be asked for the server port and address and the password.

runner server: runs a server that directly uses the runner APIs. This server is not TCP/IP. You must copy/paste values to/from the client.

runner client: runs a client that directly uses the runner APIs. This client is not TCP/IP. You must copy/paste values to/from the client.

manual server: runs a server that uses the low level SRP APIs. This server is not TCP/IP. You must copy/paste values to/from the client.

manual client: runs a client that uses the low level SRP APIs. This client is not TCP/IP. You must copy/paste values to/from the client.
 

password//通过明文获取v和s值

server//建立一个server示例,需要设置端口,v和s值

client//建立一个client示例,通过使用密码连接server

上面这两个是一对,验证密码后,在客户端输入任意字符串,服务器会返回对应的字符串.按我的理解应该是协议加密的使用方式

runner server

runner client

这两个是一对,这里要注意的是运行这对示例的时候,需要两边复制值完成校验.按我的理解其实就是manual的一种版本没有显示A,B,M1,M2而已


manual server

manual client

这两个是要手动输入v和s值,一步一步校验.

下面的协议逻辑也主要根据这个示例来得以实现.


协议设定顺序:

客户端                                                                      服务器


账号 c->s 根据账号从数据库取出v和s值

//这里要注意的是Mangos保存了密码p, 是错误的. 服务器不应该保存密码或其散列值.

//应该在创建用户时, 由客户端取s值, 计算v, 将{I, s, v}传输到服务器并保存.(I==账号名)
//登录时, 特定用户的s, v应该是固定的, 从数据库读取, 而不是每次登录时随机.


客户端得到 s和B值     c<-s                         从数据库取出s,v后把s和公钥B下发


//客户端通过 服务器下发的S值获取到公钥A,通过服务器下发的公钥B得到M1值



客户端发送公钥A和M1   c->s                     服务器用得到的公钥A和M1做校验


//服务器校验M1值


客户端获取登陆结果     c-<s                         服务器下发验证结果




附件包含了上述逻辑的一个测试用例,有兴趣的朋友可以下载看看

 

分享到:
评论

相关推荐

    secure-channel-srp6a-applet:用于SRP-6a的经过密码验证的安全通道的Java卡小程序,可保护元素智能卡

    此Java Card小程序是Wu [1]对安全远程密码(SRP-6a)密码认证的安全通道协议的实现。 结合使用现成的应用程序(例如使用我们的的Android应用程序)的实现,您可以建立一个使用PIN或密码进行相互身份验证的安全通信...

    SRP-6a:安全远程密码协议(SRP)算法的实现

    现在,建立了相互身份验证(没有发送密码或秘密)。 SRP登录页面: 用户名:madavadiyana,密码:TEv7puHvIx1234(您可以netwok流量Chrome的开发者工具观看) 常规登录页面:http: (与上述凭据相同) 待办事项...

    SRP-6:SRP-6 协议实现概念的一个小简介

    SRP-6 SRP-6 协议实现概念的一个小证明。 它是一种协议,可以在不向服务器发送明文密码的情况下通过服务器对用户进行身份验证。 有关更多信息,请查看上的作者论文。 我将 phpseclib 的用于服务器算术实现,以及 ...

    secure-channel-ec-srp-applet:Java卡小程序,用于SRP的椭圆曲线变体(基于IEEE 1368.2-2008中的SRP-5),以提供经过密码验证的安全通道来保护元素智能卡。 https

    此Java Card小程序是IEEE Std 1363.2-2008 [1]认证的安全远程密码(SRP-5)密码认证的安全通道协议的椭圆曲线变体的实现。 结合使用我们的应用程序(例如Android应用程序)的实现,您可以建立一个使用PIN或密码进行...

    java 门禁系统的面向对象设计

    总结来说,Java门禁系统的面向对象设计涉及到用户、验证、授权、记录、报警等多个方面,通过合理的对象划分和接口设计,可以构建出稳定、灵活的系统架构。在实际开发中,还需结合具体的业务需求和技术选型,进行适当...

    Java基础银行系统

    总的来说,"Java基础银行系统"项目是一个全面的学习资源,涵盖了Java语言的基础知识、面向对象编程、异常处理、输入验证、安全性以及并发编程等多个方面。通过实践这个项目,初学者可以深入理解Java编程并掌握构建...

    java写的ATM自动取款机

    除了集合,ATM系统还需要实现各种控制流程,如登录验证、交易选择(存款、取款、查询余额等)、异常处理(如密码错误、余额不足等)。为了使代码结构清晰,我们可以采用面向对象的设计原则,如单一职责原则(SRP),...

    java 学生成绩管理系统

    6. **软件设计原则**:遵循面向对象编程的原则,如单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)和依赖倒置原则(DIP),可以使代码更易于维护和扩展。 7. **测试**:为了保证...

    Java-简单图书管理系统代码压缩包

    2. **Test.java**: 这个文件很可能是测试类,通常在Java项目中用于验证其他类的功能。开发者可能会在这里编写JUnit测试用例,以确保代码的正确性。测试类对于软件质量控制至关重要,它们帮助找出并修复潜在的错误和...

    基于Java的两个通用安全模块的设计与实现(源代码+论文).rar

    6. **源代码设计与结构**:良好的模块化设计原则,如单一职责原则(SRP),开闭原则(OCP),依赖倒置原则(DIP)等,将有助于代码的可读性和可维护性。 7. **异常处理与日志记录**:在安全相关的代码中,异常处理...

    基于Java Swing 企业员工信息管理系统

    Java Swing企业员工信息管理系统是一款利用Java的Swing库开发的桌面应用程序,专为管理企业内部员工的各类信息而设计。Swing是Java Standard Edition (Java SE) 的一部分,提供了丰富的用户界面组件,使得开发者能够...

    ATM.rar_java_wheredss

    - TestATM.java:这可能是一个测试类,用于模拟用户交互,验证ATM系统在各种状态下的正确行为。 通过深入理解和应用State模式,开发者可以创建灵活、可扩展的ATM系统,使其能够应对未来可能增加的新功能或状态变更...

    DengLu.rar_登陆

    1. **用户认证**:通过比较输入的身份号和密码与数据库中的记录来验证用户身份。这可能涉及到SQL查询和哈希比对。 2. **会话管理**:当用户成功登录后,系统通常会创建一个会话(Session)以跟踪用户状态,直到用户...

    srpforjava:自动从code.google.compsrpforjava导出

    Java的SRP SRP-6a的实现-安全远程密码协议。 参见和 。 合并了SRP-6:安全远程密码协议的改进和细化中描述的改进。 SRP试图消除客户端/服务器用户身份验证中涉及的许多安全问题。 我不懂数学,但是想法很简单。 在...

    阿里巴巴Java开发手册(最新版)

    11. **安全性**:包括输入验证、密码加密、防止XSS攻击、CSRF防护等,强调在开发过程中要考虑安全问题。 12. **代码审查**:鼓励团队进行代码审查,提高代码质量,促进知识分享。 《阿里巴巴Java开发手册》是一份...

    OneTimePadCrypt:用 Java 编写的简单一次性加密和解密

    6. **用户界面**:如果项目包含用户界面,可能使用了Java Swing或JavaFX库,让用户能够输入文本、选择文件和执行加密解密操作。 7. **错误处理**:良好的编程实践包括错误处理,以防止未预期的输入或异常情况导致...

    educoder平台操作

    - 计算机类1810 (邀请码:SRP4W3) - 计算机类1811 (邀请码:CYWKO4) - 计算机类1812 (邀请码:67SE42) - 计算机类1813 (邀请码:UQCJZK) - 通信工程1801 (邀请码:BSN9VL) - 通信工程1802 (邀请码:3HDOGB) - 通信...

    jaybird

    支持以下身份验证方法:安全密码验证(Srp);传统密码(Legacy_Auth)身份验证;使用安全策略的多因素身份验证(密码,证书);通过GSSAPI(Gss)机制进行的可信身份验证。使用加密提供程序CryptoPro实现对多因素...

    银行系统代码

    为了确保交易的安全,我们可能需要实现一些安全机制,比如密码验证。当用户尝试执行涉及资金变动的操作时,系统应该先验证用户的身份,这可以通过在`Account`类中添加密码字段并实现一个验证方法来完成。 此外,...

Global site tag (gtag.js) - Google Analytics