如果您使用一个guid作为一个面向公众的应用程序的密码,作为获取服务访问权的一种手段,那么这种安全性是通过模糊来实现的吗?
我认为显而易见的答案是肯定的,但是我觉得安全级别很高,因为猜测guid的可能性很低,对吗?
更新
guid将存储在设备中,插入后将通过ssl连接通过guid发送。
也许我可以生成一个guid,然后在guid上执行aes 128位加密,并将该值存储在设备上?
- 是用户输入的GUID密码,还是您在谈论服务的密码?
- 约翰克斯,主要问题是。
- 相关问题stackoverflow.com/questions/38087244/…
在我看来,答案是否定的。
如果将密码设置为新创建的GUID,那么它是一个相当安全的密码:超过8个字符,包含数字、字母和特殊字符等。
当然,在guid中,'{'、'}'和'-'的位置是已知的,而且所有字母都是大写的。因此,只要没有人知道您使用的是guid,密码就很难破解。一旦攻击者知道他在寻找一个guid,暴力攻击所需的努力就会减少。从这个角度来看,这是一种默默无闻的安全。
不过,考虑一下这个guid:{91626979-FB5C-439A-BBA3-7715ED647504},如果假设攻击者知道特殊字符的位置,那么他的问题就减少到查找字符串91626979FB5C439ABBA37715ED647504。强行输入32个字符的密码?只有在你有生之年,如果有人发明了一台可工作的量子计算机,这种情况才会发生。
这是通过使用一个非常,非常长的密码,而不是默默无闻来实现的安全性。
编辑:读完丹尼斯·亨尼西的答案后,我必须修改答案。如果guid确实以可解密的形式包含此信息(特别是mac地址),攻击者可以大大减少密钥空间。在这种情况下,它肯定是安全的默默无闻,读:相当不安全。
当然,Musigenesis是正确的:有很多工具可以生成(伪)随机密码。我的建议是坚持其中之一。
- 包含MAC地址不需要guid/uuid。这只是生成guid的几种方法之一。
- 然而,这些方法中的大多数都使用已知和可预测的方法来计算这些值,作为一种实现数学上唯一的值的方法,这种值比普通随机数字串更不可能导致碰撞。
实际上,使用一个guid作为密码不是一个好主意(相比之下,使用一个真正的长度相等的随机密码)。虽然它看起来很长,但实际上只有16个字节,通常包括用户的MAC地址、日期/时间和一个很小的随机元素。如果黑客可以确定用户的MAC地址,那么猜测他可能生成的guid就相对简单了。
- 如果我在guid值上进行aes加密呢?然后在服务器端描述和比较?
- 这取决于UUID的版本。并非所有的发电机都使用这种方法。Java也不适用。对于不包括MAC地址的最新版本的Windows也不正确:MSDN.MySo.CON/E-US/Labalay/AA399205.ASPX。
- 您应该将传输安全性(在这里加密传递凭证的链接)与凭证的强度分开。如果设备上有128位可用于保存"密码",那么最好的密码就是128随机位串。吉他比那弱
- en.wikipedia.org/wiki/globall_unique_identifier对用于生成guid的不同算法以及它们不适合用作加密密钥的原因有很好的描述。
- @布兰克曼:如果攻击者已经知道什么是密码,那么对它进行加密是没用的。加密一个容易发现的值是非常无用的。
- @丹尼斯:在我看来,这是一个关于拥有一个好的随机数生成器的教训,而不是guid固有不适用性的证据。这篇文章只显示(因为我只读英文)win-api生成器有缺陷…也就是说,128随机位串仍然是最好的主意。
- 正如Estaban已经指出的,这只适用于版本1的guid。版本4的guid是伪随机的。也就是说,同样安全的伪随机密码可以使用较少的字符和较大的字符集来生成,这就减少了最终用户存储或输入信息的负担。
如果可以观察到正在发送的guid(例如,通过http-auth),那么它与猜测无关。
有些网站,如Flickr,使用API密钥和密钥。密钥用于通过MD5哈希创建签名。服务器使用密钥计算相同的签名,并以此方式进行身份验证。这个秘密不需要通过网络传播。
- 所以客户机发送一个MD5散列的密钥,然后flikr只验证散列decrptes到他们的秘密值?
- 不。他们试图从秘密中生成相同的哈希。如果结果哈希与发送的哈希匹配,则一切正常。你不能解密单向散列,这就是重点。
guid是为了防止意外碰撞,而不是故意碰撞。换句话说,你不太可能猜到一个guid,但不一定很难知道你是否真的想要。
起初,我准备给出一个无条件的"是",但这让我想到,这是否意味着所有基于密码的身份验证都是模糊安全的。在某种程度上,我认为这是最严格的。
但是,假设您有用户使用密码登录,并且您没有在任何地方发布该guid,我认为用户使用的安全性较低的密码,甚至系统管理员密码都会使风险更大。
如果你说一个不受保护的管理页面的URL包含一个硬编码的guid,那么答案肯定是肯定的。
- guid存储在设备中(可能被盗),但他们需要用户名/密码+猜测guid
- 那样的话,我觉得你很好。guid本身肯定是模糊的,不明智的,但是在一个可靠的认证系统上稍微模糊一些听起来是合理的。
通常,如果您将密钥嵌入到设备中,或者在身份验证期间传输密钥,则会引入安全漏洞。它们的密钥是一个guid还是一个密码并不重要,因为唯一的密码区别在于它们的长度和随机性。无论哪种情况,攻击者都可以扫描产品的内存或窃听认证过程。
您可以通过几种方式来缓解这种情况,每种方式最终归结为增加密钥的模糊性(或保护级别):
在存储密钥之前对其进行加密。当然,现在您需要存储该加密密钥,但是您已经引入了一个间接级别。
计算键,而不是存储它。现在,攻击者必须对您的算法进行反向工程,而不是简单地搜索密钥。
按照其他人的建议,在身份验证期间传输密钥的哈希,而不是密钥本身,或者使用质询响应身份验证。这两种方法都防止密钥以明文形式传输。ssl也可以做到这一点,但是您依赖用户来维护适当的实现;您已经失去了对安全性的控制。
和往常一样,无论何时处理安全问题,都需要考虑各种权衡。攻击的可能性有多大?如果攻击成功,风险是什么?在开发、支持和可用性方面,安全性的成本是多少?
一个好的解决方案通常是一个折衷方案,能够令人满意地解决这些因素中的每一个。祝你好运!
我同意大多数人的看法,它比弱密码更好,但最好使用更强大的东西,如用于这种身份验证的证书交换(如果设备支持)。
我还将确保您执行某种类型的相互身份验证(即让设备验证服务器的SSL证书,以确保它是您期望的证书)。我可以很容易地抓取这个设备,将它插入我的系统,读取它的guid,然后将其重放回目标系统。
它只是通过模糊来保证安全,在某种程度上,这就是密码。使用guid作为密码的主要问题可能是只使用字母和数字。但是,与大多数密码相比,guid相当长。完全搜索没有安全的密码;这很明显。仅仅因为一个guid可能或可能没有基于某种时间戳的基础,或者也许一个mac地址是不相关的。
猜测它和其他东西的概率差异非常小。有些guid可能比其他guid更容易被破坏(读:快)。越长越好。然而,字母表的多样性也更好。但同样,详尽的搜索揭示了一切。
当然,这是默默无闻的安全。但这不好吗?任何"强"密码都是暗箱操作的安全密码。你指望认证系统是安全的,但最终如果你的密码是容易猜测的,那么认证系统有多好并不重要。所以你要做一个"强"和"模糊"的密码,使它很难猜测。
这真的取决于你想做什么。使用一个guid作为密码本身并不安全(但是要注意,guid包含128个总数中的许多可猜测位:有一个时间戳,其中一些包括生成它的机器的MAC地址等),但真正的问题是如何存储密码并将其与服务器通信。
如果密码存储在从未向最终用户显示的服务器端脚本上,则没有太大的风险。如果用户下载到自己的计算机上的某个应用程序中嵌入了密码,那么您将不得不混淆该应用程序中的密码,并且无法安全地执行该操作。通过运行调试器,用户将始终能够访问密码。
至少比用"密码"作为密码要好。
我不认为一个guid会被认为是一个强大的密码,有很多强大的密码生成器,您可以像guid.newguid()一样轻松地使用。
- guid是一个非常强的密码…其中有2^128个,猜测一个随机的guid会花你一段时间。但是,如果一个强密码(guid或其他)被写在每个人都能看到的地方(或者隐藏在他们能找到的地方,如果他们足够努力的话)。
- +1表示密码"password";-)
- 美国政府的数据可以分类使用AES和128位二进制密钥…一个随机的guid将是一个128位的密钥…对我来说足够强大。
- @詹姆斯:我前几天才知道,但实际上这只是一把124点的钥匙,所以他对军队来说有点太短了。
- @Rob:这绝对不是我的领域,但我认为一个强大的密码需要有大小写字母、数字和时髦的符号(以最大化字节值的范围)。字符串的guid通常是十六进制的(0-9和a-f),这会使它们甚至比正常的弱。我不知道。
- 哦,还有连字符(有时)。至少这是一个古怪的角色。
- 你把字符和位混淆了。一个字母数字字符(A-ZA-Z0-9)代表62个可能的值,即大约6位。十六进制字符表示16个可能的值,即4位。21个字符的alpha num密码大致相当于32个字符的guid。
- @詹姆斯:我不会把任何事情和任何事情混淆。当他谈到使用一个guid作为密码时,他表示密码是这样的:"5aaa7114-35b1-4ca3-b059-a868d4628378"。当然,这只是一个36个字符的字符串,但仅由17个不同的可能字符组成。
- @穆西:我的观点是,他的36个字符的字符串相当于一个较短的21个字符的字符串(可能有16个特殊符号)。在大多数系统中,这会使密码很难暴力地强制它是一个"强"密码。
- 上/下/符号只是更好地利用可用字符的一种方法。所以是的,它比完整的alpha num 36 char密码弱…但它仍然和典型的"强"密码一样强,有12个随机字符,分别是uc/lc/num/sym/etc(78位)。
- @詹姆斯:我没有意识到纯粹的长度有助于增强密码的强度(我认为我在考虑哈希键或其他东西),尽管这很明显是有道理的。我很笨,我收回了我的答案。:)
- 除了"使用密码生成器"部分。
- 以及"密码"标签。
我建议不要使用guid作为密码(除了最初的密码,以后可能会更改)。必须记下才能记住的任何密码都是固有的不安全的。它会被写下来。
编辑:"固有"不准确。查看评论中的对话
- 它没有被写入,只是通过一个设备自动发送。
- 我想他是在说服务密码。在这种情况下,更罕见的是需要经常进入它,使它不太可能是一个问题。
- 为什么这个神话会继续流传下去?备受尊敬的安全专家揭穿了这个神话。schneier.com/blog/archives/2005/06/write_your.html
- @詹姆斯·谢克:读过博客的文章。施耐尔希望人们把纸放在钱包里。大多数人会把它贴在键盘下面或抽屉里。恐怕这不是神话。
- 如果是贴在便条上,或是放在电脑旁边的记事本上(我都看过),那就不是神话,而是真正的危险。我尊重专业人士,除了崇拜施耐尔。他没有揭穿这件事。见Treb的评论。
- 欧普说:"任何要记住的密码都是不安全的。"与其教人们"不要写",我们应该教人们"如果你写下来,把它放在安全的地方。"
- 关键短语"本质上不安全",使你永远不能写下你的密码…这会助长各种不良行为。在这种情况下,我们应该鼓励人们保护物理物品,比如写的密码——这是大多数人都能想到的。