« 《游戏之旅——我的编程感悟》2006金秋读书季 | 返回首页 | 服务器消息的广播 »

可不可以只有密码没有用户名?

很多网上服务都需要用户注册,而注册的过程往往降低了用户体验。已经有许多人在做一些尝试,简化注册的过程。最简洁的莫过于第一次使用即注册,但是这依然有用户名以存在的麻烦。

很早以前有过一个想法,如果大家都用自己使用的 email 地址做用户名登陆,通常就不会有用户名冲突的情况了,甚至可以选择不使用密码。反正许多网上服务,并不需要密码保护个人身份或者个人数据。而且等到需要的时候,完全可以通过 email 设定一个密码。

一旦用户选择给 email 用户名加一个 nickname 或者由系统自动产生一个名字,而 email 地址不可见,那么 email 地址就成了一个密码的作用,只不过密码强度太低罢了。

这个方法的好处是显而易见的:用户的记忆量下降了。注册的难度也降低了许多。而提供服务的网站,却可以得以区分用户。

那么如何识别出伪用户,让真用户不因为有人可以对他冒名顶替而失去网上唯一身份的安全感呢。除了用户自己要求加一层密码保护外,我想可以让系统智能一些的判断。比如挑选出异常的登陆 ip 发 email 通知,或者在长时间不登陆的时期,对于突然的新一次登陆发 email 提醒。我认为做一些合适的手段,这个方案会更容易让用户接受。

今天突然又想到另一个问题,能不能取消用户名,而只有密码呢?在我们的网络游戏的论坛上,有这样的告示提醒玩家,不要轻易的暴露自己的用户名。也就是说,用户名其实也是用户个人身份安全保障的一部分。如果我们把用户名和密码连在一起输入,对于每个人,其实就是一个全局唯一串用来识别身份。把这个串切分成用户名和密码两部分,只是一种惯例而已(当然还有实现上的方便)。

我们何不尝试破除这个惯例,直接让用户在注册的时候完整的输入一个唯一字符串?

我们在用户注册的时候就检查出一些不安全的密码设定,保护用户的帐号安全。比如,要求密码至少 8 位,且包含字母和数字(甚至要求大小写混用或是外加标点)。一旦不符合基本安全要求,就拒绝注册。这样可以极大的避免两个人使用相同密码。

而一旦某人使用了一个前人已经用过的密码串注册,可以直接提示他密码不安全,不准注册。然后封存前一个人的帐号,并 email 通知他修改密码(如果没有留 email 则直接封一段时间帐号即可,并在他下次登陆的时候提示修改密码)。

如果这样做,当然有可能被人撞上一组可以进入系统的别人的密码。但是我认为传统的用户名密码设计不会更安全。相反,我们可以得到这样一个好处:让用户用更安全的密码。这来自于非恶意的猜测。而对于恶意的攻击,可以想出更多的方法来阻挡。比如提示正常用户,当密码失效的时候,即时检查自己的 email ,或者等待一段时间(解冻期)再试。而当自己的密码不太安全时,系统可以协助用户重设密码(可以是自动的)。对于恶意暴力尝试进入系统的 ip ,则可以直接让他短时间内不能用任何密码登陆。

暂时就想了这么多,写出来只为留住思维的火花。

Comments

闹!

Google的手机服务就是采用了类似的标识码,不过这个全局唯一的标识码是Google随机生成的,我老是没记住

其实可以通过绑定机器码(比如CUPID,网卡ID)来减少输入,不输入用户名,甚至可以密码也不用输入,只要你的反外挂够强的话

没什么特殊的。就是序列号

身份证号不就行了么?
这个不会重复。

如此,安全与危险并存.

Miscroft 的 IdCard 方向可以解决这个问题,提供统一的验证平台,思想也是好的。那么中国自己建立一个,然后国际建立一个,这样和DNS的结构有希望一样。

可不可以只有密码没有用户名?

盗号就更简单了。。。。。。。。
而且没准一个不想盗号的不小心输错密码了就把别人的号搞来了。。。。。。。。。。。。

注册时候分开用户名和密码,在以后登陆的时候就直接把用户名和密码加一起形成一个新秘密输入而不需要输入用户名

我的想法里,黑名单是系统运行一段时间后自动生成的。任何两个人注册的时候碰到一起的短语,就自动进入了黑名单;然后让先用它的人修改。

最近想根据这个方法实现一个这样的系统,又想到了一需要增加的东西,就是短语黑名单。 可以预先将常用的名言、俗语、诗歌、成语、歇后语等等词汇的散列都放到这个黑名单中,以及系统运行时在注册过程中出现过所有重复的短语散列都加入这个短语黑名单中。这样这些在黑名单中的散列值就是不安全的短语,在注册或修改短语时可以与这个黑名单进行对比,采用散列可以使用整数方式加速度比,如果散列值过大还可以分段等方法加速,可以使用自己编写的格式。
这样唯一的坏处就是减少了短语的分布空间。过度的重复,这个库将会很大,而且也会使注册修改的时间加长。不过带来的好处是值得的。只要给足够大的空间分布就可以了,128bit可能不够用。当然也可以公开这个库,使不安全的短语更少的出现。hoho~ 也许可能会造成玩家输入n多短语都会提示不安全。我想见多了会习惯吧。
我的系统想采用短语和帐号密码并存的方式~ 虽然有短冗余,但就看用户的喜好好了。

to Atry
不会的,现在的语音识别系统是可以识别包括感冒在内的声音变化的,照样可以正确的识别出特征码。

想想既然是客户端程序也可以用语音代替短语,甚至可以做声音特色提取或则用声音转文字(不过有方言的同志就麻烦了,还是提取特征码好,可以防止盗窃,也能达到将军令的某些目的,一个人一个账号#83),进入大话登陆窗口的时候弹出一个小动画,嘴里说着:“说出你的咒语就让你进入游戏,否则免谈~”我想用户体验会更好。

还有一个好处,感冒了嗓子哑了自动禁止登陆,安心养病吧

IPv4提供给国内的地址不足,很多ISP都是动态分配地址,用Ip黑名单也要想办法防止恶意的黑客故意大量的使用某些网段地址,发送错误的短语,造成正常用户无法登陆,或者是伪造TCP/IP包的情况(对协议的底层没有细读,不知道是否可以伪造),如果不能伪造对正常用户影响就不大,等上几分钟就好了。

用语音特征码有个好处就是可以N多人用同一个密码,解决了以上提到和一些缺点。相信我用得最多的就是:“芝麻开门”,所以一定要取名“芝麻开门”, 一进入网吧就听见N多人都在喊“芝麻开门”是什么样一个感觉要。特色~~真是特色呀~

想想既然是客户端程序也可以用语音代替短语,甚至可以做声音特色提取或则用声音转文字(不过有方言的同志就麻烦了,还是提取特征码好,可以防止盗窃,也能达到将军令的某些目的,一个人一个账号#83),进入大话登陆窗口的时候弹出一个小动画,嘴里说着:“说出你的咒语就让你进入游戏,否则免谈~”我想用户体验会更好。

再加上一个IP黑名单列表应该会更有效,如果这个IP在一定时间内有超过10次或更多输入错误的短语就会加入黑名单中,即使是被他猜中了也不能登陆,需要等上10分钟才能登陆。
也就是把IP地址当作原来的用户账号,用户短语当作原来的密码。
以后写其他项目的时候试着把这个“芝麻开门”系统和原来的帐号密码系统并存看看。

没睡着又想了想,还是可以的,虽然问题还是存在,但应该还是可以接受。
只要想办法把一定量的用户分散在宽大的空间中还是可以的。比如100万用户分散在128bit的空间中,只要能保证足够分散,对破解还是有一定难度。可以引入短语式密码,要求用户输入一串短语,再把这段短语进行散列成128bit值或更大值视用户量而定,再大也没有账号加密码来的长,大话中支持20字节账号,20字节密码,320bit用来存10亿人应该够分散了。必须要求用户不要使用成语、谚语、诗歌、名言、俗语等常用词汇,不过这个要求可能都是耳边风了。毕竟是人都喜欢注册abc.com不喜欢63位的域名吧。而且短语容易输入错误,特别是在不显示输入信息而以*代替的时候。偶尔用一下可以要是每天都要登陆多次游戏就不爽了,在家可以明文显示短语,在网吧就不行了。虽然还是存在被猜到的可能,比如万能的开门咒语“芝麻开门”,干脆取名“芝麻开门”系统好了。

觉得想法不错,但是还有许多问题需要解决。
注册时输入一串符串,这个可以。但是输入简单字符串的相同情况会很多,前期会造成大量不明原理用户平凡的修改字符串,这个时候降低了用户体验,甚至可能放弃。特别是老用户因为冲突被暂时锁定,当然可以只提是老用户应该修改字符串了,或遇到多少次冲突后才锁定,如果是我我就会觉得系统不安全,修改多了也容易忘,虽然可以有多种取回的方法,但毕竟是麻烦事。
这倒没有什么,最致命的是,我知道了这个原理,我就不用去注册了,直接随意的根据某些国内特色字符串输入登陆字符串,运气好的话,说不能我很碰上几个对得上的,呵呵,别说不可能,每个别有所图的人遇到一次就足够。当然可以使用类似将军令的方法,但是总不能要求每个用户再多花几十块吧,如果是这样那用原来的就好了,反正有了将军令一样是安全,如果是这样那就可以把字符串理解成原来用户名,将军令是密码,失去了体验的意义。
改变习惯不一定是好事。虽然计算机也只是理解最后被确认身份的那个数字。但是把这个值搬到前台来安全也很是问题。
也许心血来潮就会有黑客利用目前手上的僵尸网络做这个测试,相信必ddos还要有利可图吧。

呵呵,可以让用户输入一串,再让系统强制加上分配的一位或者两位..这问题不就解决了?记两位应该不难吧?

"不同的兩個人完全有可能設置同樣的密碼" 只在第一次注册和修改密码时才会发生,在使用时并不会发生。我们知道,更改密码或注册新密码的频率要远远低于登陆使用密码的。

所以并没有 "安全性直接敗到之前的1/N以下"

相反,这样可以提高安全性。一个被人碰上的密码通常是不安全的。我们用这个系统直接让双方都不再使用这个不安全的密码。而关上的门需要从另一个地方打开。(例如从绑定的 email 中重设密码)

而且,任何一个安全守册都会建议你定期更换密码,这样的系统会帮助你做到这一点。如果密码足够复杂,频率就低一些,甚至永远不用更换;密码太简单,可能就会频繁一些。

信用卡是有實體的身份認証,而在網絡上是沒有一個實體的身份認証的。用戶名為區別不同的用戶,密碼是用以驗証身份的正確性。如果沒有了用戶名,只有密碼,那麼安全性直接敗到之前的1/N以下,如果一個用戶與另外一個用戶的密碼驚人的重合,那麼就與一個遙控開了兩輛車一樣。同時也就獲得了那個人的身份,使得身份就變成了黑客帝國中的史密斯!

一個身份無論如何都應該有唯一的標識(無論人工輸入還是機器產生),而密碼則不同,不同的兩個人完全有可能設置同樣的密碼。

在打開一扇門的同時也關上了另一扇門。

大家不要被信用卡误导了 :)

基本上商户是不校对信用卡背后的签名的,因为若要损失,也是银行的。欧美国家尤其如此,我在美国消费的时候,人家看都不看卡背后一眼。签名只是一个君子协定罢了。

网上信用卡消费需要输入密码,似乎也是中国特色。还有一些中国特色是,某些地方信用卡消费需要出示身份证等等。

其实我并不想举信用卡的例子来做为我的这个方案的论据,个人觉得还是有很大不同的。(最大的不同是,信用卡号是系统分配而非自己产生;另一点就是不能随意更改)

至于用户名的身份认证功能,要看运用的场合了。计算机系统的确需要一个唯一串做身份认证,无论什么系统,最终都会产生一个这样的串。但是与人的交流却不是必须的,不一定需要展示出来,也不必在登陆时暴露的。

用户名、密码都是唯一身份识别的组成部分,有些时候作为永久恒定的用户名需要通过某种途径传播出去,并被其它系统识别、记住。

平时信用卡的密码就是卡背后的签名,而网上购物的时候如果不需要再使用额外的验证密码的话……

安全的系统是整个系统的所有环节都必须是安全的;)而系统中的人常常是最容易被忽视的安全隐患。

在游戏系统里,你的好友只是一个对象。向系统通知交易对象,使用一个字符串只是诸多手段中的一种而已。最终系统认的也不是这个字符串,而是字符串对应的一组数据。

正如你聊 qq 不需要记住聊天对象的 qq 号,也不怕他更改 nickname 是一个道理。跟你的朋友通 email ,你也未必背的出他们的 email 地址;甚至你打电话发短信,有几个人记的住朋友的电话号码。

标识一个人的身份可以用用户名,也可以用数字 id ,但用不用让人记住,甚至用不用让人看见,都不是必要的。

俺水平不高,是抱着学习的目的来滴,在这个问题上确实有点想不清楚。如何不暴露用户名这个标识而使各个用户间互相确认身份,并且用户名本身又在被探测到重名的时候必须改变的。我想来想去认为要么使用email,要么系统为每个注册用户分配id。id不好记,email暴露个人信息。另外在很多初级的游戏用户中,没有自己的email是很常见的(主要是中老年)。另 ,信用卡的数字是暴露的,但是还有卡本身的物理防伪和个人签名起作用,在网络上使用时候一样是需要密码的。因此和cloud这个想法是两码事。

那并不是困难,不过我不想解释了。

问。。。使用该方法后如何解决好友列表,虚拟交易实现的困难? 该用什么来标志其他的用户,显然在任何场合是不能把用户名暴露的!昵称肯定是不行的,昵称是允许重复而且用户自己修改频率很高的,难道系统在注册时候分配用户一个个长长的ID让用户记住么?呵呵。再想下这个想法貌似有点不实际,带来的好处(少输入一个串)比带来的麻烦多的多。

这个方案就是为了让用户更安全,随带更方便。

安全是第一的,不安全的密码会得到及时更换。密码的长度跟安全性之间原本就是矛盾。

长密码并不麻烦,比如玩游戏时天天输入,很难忘记。而输入过程要比分两段输入方便的多。而且全程是密文,更加安全。

另外的一个好处是,付费帐号跟登录帐号自然分离。是先注册了后,需要付费了后再绑定 email 。以网易通行证为例,付费帐号是 163 的 email 绑定的,因为不再需要每次输入通行证,自然减少了许多盗号的可能。

新用户注册屏蔽老帐号,只能说明密码的不安全,可以提醒双方更换密码。一段时间稳定后,大家就可以都采用更安全的密码了。而老用户被屏蔽后,可以方便的用 email 重新激活,其手续并不麻烦。

这么做导致用户的所需要的识别串过长(短串重复率过大),虽然少输入了密码,实际上用户的记忆量没有减少甚至反而增大了。另外在重复识别的处理上也比较差,注册时重名的可能性是非常大的(比如用自己的名字+生日),新人的注册输入会导致老帐号的临时封闭也是绝对不能让人接受的。办法也是有的:注册时候系统取串前60%子串检查是否被已注册名字包含就可以了,这样本质来说还是在系统内部强行拆分了用户和密码,还不如直接采用原来的模式了。

如果要申请的id和已有的id相同怎么办?

对,我就是这个意思。

所以应该克服技术困难,取消用户名,让用户只需要输入密码就可以确认身份。提高用户体验。

只考虑技术,不考虑用户的感受也是不妥的。

信用卡不就是这样的吗,只有一串长长的数字(卡号)没有密码。要不以后网游就改刷卡登录好了,或者考虑和银行发行联名信用卡吧,嘿嘿~

Post a comment

非这个主题相关的留言请到:留言本