移动App该如何保存用户密码

小米校招产品作业解读:设计一款日记APP 题目:设计一个日记App,提供目标用户分析、主流程交互框图 在人人都是产品经理看到这个标题,突然感到很有兴趣。众所周知,移动端输入内容远远还没有做到PC上那么便捷,是怎样的一款能让用户选择移动端而非PC来写日记呢?这一年多来,都是在这个网站上看别人的分析和经验总结,这次就不看作者的观点了,谈谈自己的一些见解。 目标用户分析 移动端相比PC端最大的优势,就是可以随身携带,能充分利用 阅读详情

这个实际上和桌面程序是一样的。

先看下一些软件是如何保存用户密码的:

  • 我们先来看下QQ是怎么保存密码的:

参考:http://bbs.pediy.com/archive/index.php?t-159045.html,

桌面QQ在2012的时候把密码md5计算之后,保存到本地加密的Sqlite数据库里。

  • 再来看下手机淘宝是怎么做的:

参考:http://blog.youkuaiyun.com/androidsecurity/article/details/8666954

手机淘宝是通过本地DES加密,再把密码保存到本地文件里的,如果拿到ROOT权限,能破解出密码明文。

  • 再来看下微软是怎么保存用户密码的:

参考:http://www.freebuf.com/tools/37162.html 

我实际测试了下,可以轻松得到所有帐号的密码明文。

  • 再来看下Linux是怎么保存用户密码的:

参考:http://blog.youkuaiyun.com/lqhbupt/article/details/7787802

linux是通过加盐(salt),再hash后,保存到/etc/shadow文件里的。

貌似以前的发行版是md5 hash,现在的发行版都是SHA-512 hash。

linux用户密码的hash算法: http://serverfault.com/questions/439650/how-are-the-hashes-in-etc-shadow-generated

实际上是调用了glic里的crypt函数,可以在man手册里查看相关的信息。

可以用下面的命令来生成:
mkpasswd --method=SHA-512 --salt=xxxx

其中salt参数,可以自己设置,最好是随机生成的。
可以用 mkpasswd --method=help 来查看支持的算法。

用户密码该如何保存,还有能做到哪种程度?

看完上面一些软件的做法之后,我们来探讨下,用户密码该如何保存,还有能做到哪种程度?

  • 假定本地存储的hash串/加密串,和加密算法,攻击者都可以得到,或者逆向分析到。
实际上也是如此,通过上面QQ和淘宝的例子,允分说明了加密串是可以得到的。Linux更是一切都是公开的,只要有权限就可以读取到,包括salt值,shah算法,(salt+密码) hash之后的结果。
  • 防止攻击者得到用户密码的明文。这个实际上是从用户的角度出发,即使数据泄露了,影响降到最低。
  • 防止攻击者拿到hash串或者加密串之后,一直都可以登陆。这点对于移动设置是很重要的,比如今天用户连到了一个恶意的wifi,如果攻击者截获到请求,要防止攻击者潜伏几天,或者几个月之后的攻击。必须要让请求的凭据在一天或者几天内失效。

加盐(salt)

假如不加盐,那么攻击者可以根据同样的hash值得到很多信息。

比如网站1的数据库泄露了,攻击者发现用户A和用户B的hash值是一样的,然后攻击者通过其它途径拿到了用户A的密码,那么攻击者就可以知道用户B的密码了。

或者攻击者通过彩虹表,暴力破解等方式可以直接知道用户的原来密码。

所以,每个用户的salt值都要是不一样的,这点参考linux的/etc/shadow文件就知道了。

客户端本地存储密码的算法

应该用哪种算法来存储?

从上面的资料来看,手机淘宝是本地DES对称加密,显然很容易就可以破解到用户的真实密码。QQ也是对称加密的数据库里,存储了用户密码的md5值。

显然对称加密算法都是可以逆向得到原来的数据的。那么我们尝试用非对称加密算法,比如RSA来传输用户的密码。

那么用户登陆的流程就变为:

  1. 客户端用公钥加密用户密码,保存到本地;
  2. 用户要登陆时,发送加密串到服务器;
  3. 服务器用私钥解密,得到用户的密码,再验证。

有的人会说,如果服务器的私钥泄露怎么办?

服务器端换个新的密钥,强制客户端下载新的公钥或者升级。

可以考虑有一个专门的硬件来解密,这个硬件只负责计算,私钥是一次性写入不可读取和修改的。搜索 rsa hardware,貌似的确有这样的硬件。

当然,即使真的私钥泄露,世界一样运转,像OpenSSL的心血漏洞就可能泄露服务器私钥,但大家日子一样过。

非对称加密算法的好处:

  • 即使数据被盗,攻击者拿不到密码的明文
  • 如果发现有部分用户的数据被盗了(公钥加密后的数据),可以通过升级服务器和客户端的版本,让用户重新输入密码,用户还是原来的密码,但是攻击者却登陆不了了。
  • 对于安全要求严格的应用,还可以定期更新私钥,来保证用户的数据安全。

如何防止本地加密串泄露之后,攻击者可能潜伏很久?

这点实际上是如何让客户端保存的加密串及时的失效。

比如:

  1. 强制要求客户端保存的加密串一周失效;
  2. 用户手机中病毒了,攻击者窃取到了加密串。但是清除病毒之后,用户没有够时的修改密码。攻击者是否会潜伏很久?
  3. 发现某木马大规模窃取到了大量的用户本地加密串,是否可以强制用户的本地加密串失效,客户端不用升级,用户不用修改密码,也不会泄露信息?

下面提出一种 salt + 非对称加密算法的方案来解决这个问题:

  1. 用户填写密码,客户端随机生成一个salt值(注意这个salt只是防止中间人拦截到原始的password的加密串),用公钥把 (salt + password)加密,设置首次登陆的参数,发送到服务器;
  2. 服务器检查参数,发现是首次登陆,则服务器用私钥解密,得到password(抛弃salt值),验证,如果通过,则随机生成一个salt值,并把salt值保存起来(保存到缓存里,设置7天过期),然后用公钥把(salt + 用户名)加密,返回给客户端。
  3. 客户端保存服务器返回的加密串,完成登陆。
  4. 客户端下次自动登陆时,把上次保存的加密串直接发给服务器,并设置二次登陆的参数。
  5. 服务器检查参数,发现是二次登陆,用私钥解密,得到salt + 用户名,然后检查salt值是否过期了(到缓存中查找,如果没有,即过期),如果过期,则通知客户端,让用户重新输入密码。如果没有过期,再验证密码是否正确。如果正确,则通知客户端登陆成功。
  6. 如果发现某帐户异常,可以直接清除缓存中对应用户的salt值,这样用户再登陆就会失败。同理,如果某木马大规模窃取到了大量的用户本地加密串,那么可以把缓存中所有用户的salt都清除,那么所有用户都要重新登陆。注意用户的密码不用修改。
  7. 第2步中服务器生成的salt值,可以带上用户的mac值,os版本等,这样可以增强检验。

注意,为了简化描述,上面提到的用户的password,可以是先用某个hash算法hash一次。

具体的登陆流程:

浏览器登陆的流程:

浏览器的登陆过程比较简单,只要用RSA公钥加密密码就可以了。防止中间人截取到明文的密码。 

 


App登陆保存数据流程

App因为要实现自动登陆功能,所以必然要保存一些凭据,所以比较复杂。 

App登陆要实现的功能: 

  • 密码不会明文存储,并且不能反编绎解密; 
  • 在服务器端可以控制App端的登陆有效性,防止攻击者拿到数据之后,可以长久地登陆; 
  • 用户如果密码没有泄露,不用修改密码就可以保证安全性; 
  • 可以区分不同类型的客户端安全性;比如Android用户受到攻击,只会让Android用户的登陆失效,IOS用户不受影响。 

App第一次登陆流程:

  • 用户输入密码,App把这些信息用RSA公钥加密:(用户名,密码,时间,mac,随机数),并发送到服务器。 
  • 服务器用RSA私钥解密,判断时间(可以动态调整1天到7天),如果不在时间范围之内,则登陆失败。如果在时间范围之内,再调用coreservice判断用户名和密码。 

这里判断时间,主要是防止攻击者截取到加密串后,可以长久地利用这个加密串来登陆。 

  • 如果服务器判断用户成功登陆,则用AES加密:(随机salt,用户名,客户端类型,时间),以(用户名+Android/IOS/WP)为key,存到缓存里。再把加密结果返回给客户端。 
  • 客户端保存服务器返回的加密串 

App自动登陆的流程:

  • App发送保存的加密串到服务器,(加密串,用户名,mac,随机数)==>RSA公钥加密 
  • 服务器用RSA私钥解密,再用AES解密加密串,判断用户名是否一致。如果一致,再以(用户名+Android/IOS/WP)为key到缓存里查询。如果判断缓存中的salt值和客户端发送过来的一致,则用户登陆成功。否则登陆失败。 
不用AES加密,用RSA公钥加密也是可以的。AES速度比RSA要快,RSA只能存储有限的数据。



其它的一些东东:

多次md5或者md5 + sha1是没什么效果的。

RSA算法最好选择2048位的。搜索" rsa 1024 crack"有很多相关的结果,google已经将其SSL用的RSA算法升级为2048位的。

如何防止登陆过程的中间人攻击,可以参考,魔兽世界的叫SPR6的登陆算法。

总结:

对于网页登陆,可以考虑支持多种方式:

  • 不支持JS的,用原始密码登陆。
  • 支持JS的,可以考虑传递hash算法加密字符串。严格要求的应用,最好用JS实现RSA加密。在github上找到的一个JS RSA库:https://github.com/travist/jsencrypt
  • 客户端应用,一律应当用RSA算法,并加盐来保存用户密码。单纯的hash或者对称加密算法都不靠谱。

服务器用salt(存数据库的) + hash算法来保存用户的密码。

用salt(存缓存的,注意和上一行的salt是不同的)+ RSA算法来加密用户登陆的凭证。

这样服务器可以灵活控制风险,控制用户登陆凭据的有效期,即使用户数据泄露,也不需要修改密码。

RSA+MD5+salt 加密 支持sql 和access数据库 RSA加密工具 利用RSA+MD5+salt 加密后 可以导出csv文件,加密的csv文件可以导入进行解密 立即下载

相关推荐

从AAAI 2025被拒到ACM MM 2025录用:我的论文投稿经验与教训总结

本文分享了作者从AAAI 2025被拒到ACM MM 2025录用的论文投稿经验与教训。详细解析了格式要求、可复现性清单等关键细节,提供了精准转投策略和提升录用概率的实用技巧,帮助研究者避免常见错误并优化投稿策略。

weixin_29207533的博客 506

常用的加密算法介绍(MD5(及加salt)/SHA/AES/RSA/数字签名)及openssl使用说明

MD5(及加salt)/SHA/AES/RSA/数字签名

liuxd3000的专栏 2887

上交开源装甲板识别代码分析

GitHub - xinyang-go/SJTU-RM-CV-2019: 上海交通大学 RoboMaster 2019赛季 视觉代码这里着重分析主函数main.cpp与装甲板识别部分的工程文件armer文件夹。由于未完全分析,所以对于其中log.h、options.h中的函数并不清楚,在分析时会跳过这些内容。该文章重点分析的是思路,部分函数中的数学逻辑、数据处理思路这里不详细解释(没能力)所有思维导图通过 知犀知犀思维导图 - 知犀官网 (zhixi.com)原创。

qq_42104961的博客 1320

对RSA加密的理解

背景:最近在看唐巧的书>有一段谈到RSA加密算法的 黑客在咖啡馆或机场等一些公共场所,用自己的电脑设置一个与该场所名字相同的免费 WiFi,那么受害者只要不小心使用了该 WiFi,就可能泄漏自己的明文密码。大多数普通人, 都会使用一样的密码登录他的所有的账号,这就意味着他的其他账号,例如淘宝或网上银 行账号也有被盗的风险。 正确的做法应该是这样:事先生成一对用于加密的公私钥,客户端在登录时,使

yhhwatl的专栏 2500

ArcGIS基础实战:面数据拓扑创建和错误修改全流程

通过下图的操作我们可以发现,图层的【Shape_Length】和【Shape_Area】字段的数值都发生了改变,表明两个图层重叠的那一部分图斑合并到另一个图班上,其面积会减小、长度会变大(自己重新计算一下也可以得到此验证结果的)。如图【拓扑实验结果】文件夹里右键,新建【文件地理数据库】,并进行命名为【xx拓扑检查】备注:养成良好的命名习惯。然后在【xx拓扑检查】下右键打开【新建要素数据集】,并对数据集进行命名为【XX拓扑】,然后进行下一步设置。在【KK拓扑】数据集上右键,新建【拓扑】。

yuanYW7556的博客 1万+

01|无代码开发 | 如何使用Zion实现导航网站制作

以上就是我制作导航网站的心得,分享给大家,作为一个小白想要独立搭建一个网站还是比较困难的,而在Zion不仅可以用可视化的方法进行搭建,甚至还可以一键发布,不用考虑服务器域名啥的问题,真是太方便了。

2301_76262110的博客 1390

密码学应用(DES,AES, MD5, SHA1, RSA, Salt, Pkcs8)

目录 一、数据加密标准 -Data Encryption Standard(DES) 二、高级加密标准 -Advanced Encryption Standard(AES) 三、消息摘要算法第五版 -Message-Digest Algorithm 5(MD5) 四、安全哈希算法 - Secure Hash Algorithm(SHA1) 五、公钥加密算法(RSA) 六、干扰项 ...

weixin_30872733的博客 407

vs code , 配置 claude code 插件, 默认选项 : --dangerously-skip-permission

摘要:本文介绍如何在VS Code中为Claude Code插件配置--dangerously-skip-permission参数,包含两种方法:图形界面设置(适合新手)和直接编辑settings.json(精准配置)。该参数会跳过权限检查,仅建议在本地测试环境中使用。配置后需通过命令面板验证参数是否生效,并注意安全风险,避免在生产环境使用。多参数配置时需用数组格式,不同版本插件可能键名略有差异。

AI天才研究院 5012

常规性加密:sha1+MD5+salt

现如今互联网时代,安全问题不容小觑,加密技术屡见不鲜,接下来先简单介绍下sha1和MD5加密; MD5 的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest开发出来,经MD2、MD3和MD4发展而来。 作用:把

小下和的博客 6718

软件需求规格说明书(SRS)深入解析

摘要: SRS(软件需求规格说明书)是定义系统功能、性能与接口的核心文档,为开发、测试、项目管理提供依据。标准结构包括引言、总体描述、功能/非功能需求、接口等模块。撰写需确保清晰、可验证、无歧义,避免模糊术语。示例展示学生注册模块的需求写法,强调性能与安全性要求。推荐使用Confluence、StarUML等工具辅助编写,交付时需包含主文档、原型图及需求跟踪矩阵。SRS应兼具技术性与管理性,作为沟通桥梁和验收标准。

moton2017的博客 2933

黑猫带你学Nand第11篇:万字长文带你了解NandFlash的数据保持原理及特性(Data Retention)

TATTAT:Trap-assistedtunneling,陷阱辅助隧穿,也有叫法称为电荷陷阱现象。这是一种物理现象,它发生在非挥发性存储器,如NAND闪存。在这种效应中,存储在闪存单元浮动栅极上的电荷(电子)由于隧道氧化物中捕获的电荷形成的电场影响,导致电荷通过隧道效应从一个能级隧穿到另一个能级,从而造成电荷泄漏。这种电荷泄漏是导致闪存数据保持问题的主要原因之一,因为它可以改变存储在闪存单元中的电荷量,进而改变其阈值电压水平,最终可能导致数据错误。在NANDFlash中,电荷被存储在浮置栅极上。

黑猫奥利奥的博客 1104

移动APP如何保存用户密码

为了更好的用户体验,移动APP客户端一般都会将用户信息进行保存以便后续可以自动登录. 保存了用户信息便涉及到了安全问题. 解决的方法大概有一下几种: 1.首先,如果客户端和服务端都是你来设计开发,那么有两种比较可靠的方案 A.客户端将密码Hash加密,登录成功后将hash值保存到Sqlite.服务端得到用户名和hash值,采用同样的算法对密码进行Hash运算,然后和用户传来的hash值

leokelly001的专栏 4398

YOLOv11改进 | 融合改进篇 | 利用尺度统一检测头DynamicHead融合P2增加小目标检测层(让小目标无所遁形)

本文给大家带来的最新改进机制是针对性的改进,针对于小目标检测增加P2层针对于大目标检测增加P6层利用DynamicHead(原版本一比一复现,全网独一份,不同于网上魔改版本)进行检测,其中我们增加P2层其拥有更高的分辨率,这使得模型能够更好地捕捉到小尺寸目标的细节。我们增加P6层是一个较低分辨率但具有更大感受野的特征层。对于大尺寸目标,这意味着模型可以更有效地捕捉到整体的结构信息。在这些的基础上我们配合DynamicHead可以使模型根据不同尺寸的目标动态调整其检测策略,进一步提升模型的精度。

Snu77的博客 3955

移动App该如何保存用户密码(转)

原文地址:http://blog.youkuaiyun.com/hengyunabc/article/details/34623957 移动App该如何保存用户密码? 这个实际上和桌面程序是一样的。 先看下一些软件是如何保存用户密码的: 我们先来看下QQ是怎么保存密码的: 参考:http://bbs.pediy.com/archive/index.php?t-159045.htm...

weixin_30593261的博客 205

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

移动App该如何保存用户密码 --- 记录

转:https://blog.youkuaiyun.com/hengyunabc/article/details/34623957

qq_41497111的博客 1561

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

从研发角度,移动APP的密码安全

移动APP应用开发安全 --- 帐号密码安全 先看下一些软件是如何保存用户密码的: 我们先来看下QQ是怎么保存密码的: 参考:http://bbs.pediy.com/archive/index.php?t-159045.html, 桌面QQ在2012的时候把密码md5计算之后,保存到本地加密的Sqlite数据库里。 再来看下手机淘宝是怎么做的: 参考:http://blog.csdn

lucky_girl11的博客 1035

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

密码管理

用户信息的认证一个端到端的过程,从安全的角度看,更是一个端到端的安全认证过程: 前端用户信息输入安全性:如密码的长度要求,特殊字符组合要求,近期相似性匹配要求等 传输端用户信息安全性:如https传输过程中会用到对称加密,非对称加密和哈希算法等各种手段尽可能多的保证数据是传输是安全的 后端用户信息存储安全性:如用户密码在后端数据库中采用md5, sha1, sha25...

weixin_30323961的博客 90

手势密码设置需求——测试用例

测试用例的详细书写过程

测试小白的晋级之路的博客 2037

移动App该怎样保存用户password

版权声明:本文为横云断岭原创文章,未经博主同意不得转载。微信公众号:横云断岭的专栏 https://blog.youkuaiyun.com/hengyunabc/article/details/34623957 update 2018-06-042015年出的一个规范 JSON...

weixin_30377461的博客 320
上一篇: 利用redis + lua解决抢红包高并发的问题
下一篇: 淘宝应对"双11"的技术架构分析
codepython
博客等级 码龄20年 125粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值