原文:
http://shell909090.com/blog/2011/12/%E5%AF%86%E7%A0%81%E4%B8%BA%E4%BB%80%E4%B9%88%E6%98%8E%E6%96%87%E5%AD%98%E6%94%BE/
很早就写过一篇blog,说到过,你的密码应当一次一密,至少某些密码泄露时不至于波及太广。结果这次CSDN不幸中枪。我不去讨论多少人急急忙忙修改密码,多少人数据泄露,单说说为什么很多时候密码是明文存放的。
就我有记忆以来,我写应用就从来没有明文存放过密码。最起先是md5方式存放。md5可以让你找到hash值,有的时候也会被用于穷举。但是无论如何,md5密码本身比明文安全很多。后来改成了challenge-response验证模式,也是用md5做的hash后进行c-r的。再后来,md5的碰撞冲突的论文出来,后面用的多数都是sha256了。从头到脚,我就没做过密码明文存放,并且,我认为这是正常程序员最起码的修养。(当然,明文存放的代码不是没有,不过那是调试模式) 但是现在我所知,很多系统的身份验证都是密码明文存放的,为什么?其实我不大理解。不过有时候问起,有些人和我说了几个我觉得不是搪塞的理由,现在抄录如下,告大家知。
1.明文密码没法应付检查。大家知道互联网审查,有时往往会一个电话过来,要XX用户的密码。如果你没法给出,上头就认为你不配合,事情各种难搞。作为审查机构的老板,当然没必要知道明文密码的危害。他们只知道,我要密码,为什么不行。所以,悲崔的程序员们就往往会得到一条死命令,保存明文密码。
2.压根不知道明文密码有什么问题。中国的互联网有太多的没基础的新人,从石头的缝隙中顽强的生长出来。这不是坏事,坏事的是这些人往往会在一些基础问题上出现奇怪的毛病。例如有些程序员,写程序很快,但是居然从来不知道密码明文存放会导致什么问题。更神奇的是,这些人中,有一家银行…
3.自信暴棚的混帐。有些人的自信总比别人强,而且强在莫名其妙的地方。例如:我的服务器肯定是没问题的,所以我的密码一定要明文存放。如果不,就是质疑我的技术。
实话说,这种人真是少数中的少数。
4.遗留系统。很多系统设计的时候因为某个其他理由,使用了明文密码。等后来这个理由不存在了,密码系统升级成了一个困难。因为密码系统太重要了,所以在没有太大利益的情况下,总是倾向于不修改系统。但是有什么足够利益来推动系统修改呢?用户安全问题在发现前不是一个问题——好比这次的CSDN,不是被暴出来的话就根本不会被当作一个问题。系统的管理者,每个人都没有足够的动力去修改系统。
5.世界的阴暗角落。有的时候,程序员/老板明文存放的理由,是为了方便盗*用户其他网站资料。例如我所知的某钓鱼案例,你注册网站,就提供很多免费服务,网站看起来也很靠谱——除了后来突然爆出这家网站其实暗地中用你的生日/密码猜解信用卡/银行卡密码,大家才突然发现,这家网站其实根本没有在美国注册,而是一个听都没听说过的国家。
而且很多网站提供从其他网站导入之类的功能,更加的危险。以前经常爆出twitter密码被窃取,主要就是因为OAuth开放以前,twitter上的第三方应用需要提供原生密码,导致很多小应用的目的其实就是收集密码…
6.为了给用户提供方便。这个理由和上一个很类似,不过不是为了某些险恶的目的。而是客户经常要求——为什么我不能做XX事,为什么我不能blahblah。好吧,为了让你能,我们就必须保存明文密码。
明文密码的保存原因很多,不过结论都是一样的。在任何网站/服务上,你绝对不能使用同一个密码,零级密码除外。尤其请注意,不要在两家银行使用同样的银行卡密码/网银密码,原因不说。
从未来进化的角度说,密码的未来进化趋势是核心授权体系。就是你要向某个网站验证身份,只需要向身份验证商验证,剩下自动完成。现在的openid就是一种解决方案。密码都没了,还谈什么泄露呢?同时,实体交互和授权的精细划分也是一个趋势。某个网站访问别的网站的数据的时候,会形成一个访问令牌。这个令牌对需要访问的内容详细写明,并且需要用户授权。OAuth就是这个趋势的代表。另外一个趋势是利用某个足够安全的设备作为以上两者的终端载体。目前这个设备用的是手机,可是——手机不是一个足够安全的设备。也许这会是下一个XX门的隐患吧。
分享到:
相关推荐
密码不得以任何形式的明文存放在主机电子文档中,不得以明文形式在电子邮件、 传真中传播。 第三条 系统管理人员在建立帐号时,对所分配帐号的初始密码设置为第一次登录强制修改。对 于不能强制修改密码的系统,...
还原精灵5.0密码读取软件,只用于测试还原精灵内存中存放明文密码的漏洞。
printf("\n加密后的密文为%s\n",str2); break; } case 2: { printf("\n输入密钥:"); scanf("%d",&k); printf("\n输入密文字符串:"); scanf("%s",str1); strupr(str1); for(i=0;...
这本来确实是安全性的体现,但是看到其UDP协议明文传送的情况以后,使我对OICQ密码存储开始感兴趣。 本来以为OICQ每次都会与服务器直接验证密码,不在本地存储密码原本。但是在断线使用OICQ时候,发现其也进行...
C#实现对字符串的MD5加密方法 MD5加密通常会用在软件将客户密码存放在数据库时,这样可以有效的避免数据库中密码明文的问题
通过文件存取字符的方式,用单表替换算法,对明文进行加密得到密文...(in.txt为明文输入文件,out为密文存放文件,decry为解密后的明文文件 每一次加密完后,要清空out.txt和decry.txt文件,才能进行下一次的加密动作)
wdb的密码一直以明文方式存放,一般来说,只要服务器安全,还有管理得当,不会出现密码泄漏的问题,可是谁有能100%保证呢。vbb220版以后推出了,密码单向加密的功能和发送随机密码的功能。我就将此项技术应用到了wdb...
Cookies是Web服务器发送到电脑里的数据文件,它记录了诸如用户名、密码和关于...而且,现在很多网站收到的Cookies文件中的用户名和密码甚至是以明文方式存放的,这样就更不安全了。因此,删除掉Cookies文件很有必要。
//向右加密方法 ming为明文 mi 为密文 yao为密钥 public static void encode(String ming, int yao) { String mi = ""; for(int i=0; i(); i++){ if (ming.charAt(i) == 32) mi += (char)(32); else if ...
但是我不敢把密码写成明文, 因为印象数据都是存放在公网上的, 万一被人看到,那不是全被盗了。 于是我就想,要是能有个单机的, 让我能存放秘密信息的地方就好了。 于是他就诞生了,我给他取名叫“Secret”...
wdb的密码一直以明文方式存放,一般来说,只要服务器安全,还有管理得当,不会出现密码泄漏的问题,可是谁有能100%保证呢。vbb220版以后推出了,密码单向加密的功能和发送随机密码的功能。我就将此项技术应用到了wdb...
mongodb的用户信息是存放在system.users表中的,修改密码不能直接更新表数据,这样的话,存到表里的密码是明文的,这就不对了。
一组测试用例包括: 明文(2字节), 密钥(2字节), 对应的密文(2字节), 各一行以16进制方式存放在文本文件中. 例如: 文本文件: testcase1.txt, 内容如下(3行): 6F6B (明文) A73B (密钥) 0738 (密文)
DES密码的C语言实现。 输入为同目录下存放明文的1.txt文件,存放密钥的key.txt文件。输出为加密后的2.txt文件,以及2.解密后的3.txt。
//i 用于计数输入个数,j 为临时变量, plain 存放明文, cipher 存放密文,decryption存放解密后文本,fpp 为明文文件指针,fpc 为密文文件指针 int i,j; char plain[SIZE],cipher[SIZE],decryption[SIZE],...
教师第一次登陆系统必须修改密码(密码要求:六位以上,须包含以下三种即大小写字母、数字和其他字符(*,_,#),不得以明文的形式存放在文件中),教师不能修改学生信息,只可检索学生信息。 vi. 信息保存形式:...
因为登陆的域名和用户名是明文存储在winlogon进程里的,而PasswordReminder是限定了查找本进程用户的密码 (L"USERNAME", UserName, 0x400); GetEnvironmentVariableW (L"USERDOMAIN", UserDomain, 0x400); >,...
另外一个数据库为密钥数据库,存放着每个用户的初始密码。Table mikey: 记录了用户的 ID 号和密钥。 本地数据库的主键和外键 Table activity:主键为 actID,外键为 optID, Table customer:主键为 cusID Table emp...
注意:当服务器端为Radmin Server v3.5之前的老版本、解锁前远程桌面并未锁定而焦点又正好位于文本编辑框中,启用该功能可能会出现明文密码。 (3)、相关配置 用户可以为每条记录单独配置解锁远程桌面功能,相关...