V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  mzer0  ›  全部回复第 9 页 / 共 18 页
回复总数  357
1  2  3  4  5  6  7  8  9  10 ... 18  
2015-12-16 21:27:37 +08:00
回复了 mzer0 创建的主题 程序员 专为储存密码而设计的数据库, 可能在一年内开源
@mozartgho x0 是用户真正的密码, x 是单次输入。
2015-12-16 19:59:24 +08:00
回复了 mzer0 创建的主题 程序员 专为储存密码而设计的数据库, 可能在一年内开源
@czheo
@jarlyyn
@raincious
@wy315700
@whatisnew
@lynx
@xenme
@iugo

统一回复. 以下, 假设黑客使用的攻击类型主要为溢出攻击.

1) 为什么不做成中间件?

如果用户密码没有放在专门的数据库中, 反而, 与别的不那么重要的数据放在一起, 溢出攻击就可能使密码泄露. 最简单的例子是: 用户密码紧跟着用户名储存, 二者在储存空间上连续, 那么黑客在获取用户名的同时, 也有很大可能获取到密码. 我认为, 用户密码必须单独储存, 而且要有垃圾数据填充.

2) F 和 G 是否有被攻破的可能?

这是一个数学问题, 不在此讨论, 脱离公式和证明的数学讨论是没有意义的. 讨论暴力破解 F 同样没有意义----在网站没有被攻破的情况下, 防止黑客进行穷举攻击, 是网站设计人员的责任. 毕竟, 黑客至少要尝试上万次才可能穷举出一个密码, 而正常用户不会在短时间内进行上万次密码输入.

3) 二级验证的存在意义是什么?

我们看看一级验证的场景. 在一级验证的场景中, 主要依靠 pbkdf2 之类的 KDF 函数来保证用户密码不会被逆向, 但 KDF 的缺点是很明显的:

* 运算速度很慢.
* 多数 KDF 基于迭代哈希, 未来可能提出针对迭代哈希的快速破解算法.
* 部分 KDF 对密码的长度与格式有复杂的要求.
* 每次用户登录时, 都需要访问用户密码(尽管是经过 KDF 加密的), 无法有效防止溢出攻击.

因此, 二级验证的目的在于, 防止黑客拿到用户真正的密码, 同时避免浪费时间在 KDF 上.

* F 的速度很快, 并保证 UID 与 x0(用户真正的密码)是弱相关的, 确保穷举 UID 的原像没有任何意义----UID 可能有几千万个原像, 几千万个原像中, 可能有几万个常用密码. 我举一个非常极端的情形: 用户真正的密码是 V2EX, 但是 V2EX 与 V3EX, V2EA 同时成为 UID 的原像, 换而言之, 用户即使输入 V3EX 或者 V2EA, 也能够登录帐号.

* G 的速度非常慢, 并保证 PP 和 x0(用户真正的密码)是强相关的, 在上述情形下, 使得 V3EX 和 V2EA 都不能计算出正确的 PP, 而只有 V2EX 可以计算出正确的 PP, 从而确保敏感操作的安全性.

坦白地说, F 和 G 的设计我也不是很有把握, 因此还在查阅各方资料.

最后, 这个数据库的设计目的有三:

1) 提供一套完整的用户密码管理系统, 其作用远比通用的隐私数据库要大, 也比单独的 KDF 算法要完善.

2) 将一级验证拆分为两级验证, 从而提高数据库的安全性. 简单地说, 第二级验证是一个非常复杂的 KDF 过程, 而第一级验证只是一个非常简单的 KDF 过程. 在极端情形下, 用户修改密码时可以接受一分钟以上的等待, 让服务器在后台校验 PP; 但用户决不能接受一分钟的账户登录时间.

3) 一定程度上限制原像的作用. 用户登录时可以随机进行二级验证, 如果能通过一级验证, 但无法通过二级验证, 就说明数据库可能泄露, 黑客在使用原像进行登录. 必须说明, 这是在建立 PP 的绝对安全之上的.

同时, 这样的设计也打破了常规的思路: 以往认为, 限制黑客寻找原像才能保障安全, 但我的设计思路在于, 并不费劲去限制黑客寻找原像, 反而, 限制原像的作用----原像无法通过二级验证, 使用原像登录有一定概率被发现.
2015-12-16 13:16:01 +08:00
回复了 mzer0 创建的主题 程序员 专为储存密码而设计的数据库, 可能在一年内开源
1) 我没提到密码长度最长为 16 字符, 我在 8 楼的回复仅仅只是用 16 字符举例.

2) 这不是本科毕设. 相反, 我在大学中的专业是数学, 读过代数学和数论, 对离散密码和椭圆曲线密码有肤浅的了解, 实现一些密码系统曾经是我的作业. 对某些抬扛的朋友: 我比你更清楚加盐以及 KDF 的意义, 相反, 你除了知道这些名词以外, 什么都不懂. 你们真是耻辱.

不再回复任何抬扛. 接受提问, 接受友好的讨论, 接受建议及意见. 谢谢.
2015-12-16 04:38:11 +08:00
回复了 mzer0 创建的主题 程序员 专为储存密码而设计的数据库, 可能在一年内开源
@ryd994 这个是很难做到的, 因为 x(密码)的空间比 UID 大太多了, 穷举原像是不可能的. 例如, 网站有一千万用户, UID 的上限可能是 10 亿(10^9), 密码最大长度为 16 个字符, 可以考虑为 16 字节, 上限为 2^128, 大于 10^32, 平均每个密码至少有 10^23 个原像.
2015-12-13 14:37:30 +08:00
回复了 raysmond 创建的主题 职场话题 有没有在香港成功求职的程序员?
@raysmond 为什么不直接去美国? HK 的话多数职位要求全英文沟通,特别是港岛。
2015-12-12 20:33:55 +08:00
回复了 just1 创建的主题 分享发现 怎么做到的,超过理论速度了吧
怎么看出来是 anycast ?
2015-12-12 20:31:28 +08:00
回复了 just1 创建的主题 分享发现 怎么做到的,超过理论速度了吧
@GeekTest
@lolicon
anycast 是什么?请介绍一下
@Comphuse 我用 lastlog 看了一下, bin 也是 CentOS 的用户之一???
2015-12-11 22:52:12 +08:00
回复了 Sequencer 创建的主题 V2EX V2 上撕逼越來越嚴重了,要不弄一個 git 來雲 block?
@Sequencer 相反, 我认为"客观"是因人而异的, 因为每个人都有自己的立场. 同样地, "逻辑"和"尊重"也是. 但有一些事项, 是唯一的, 例如:

1) 在提到某个并不是广为人知的概念时, 应该做出基本解释, 而不是让对方去 Google.
2) 宽容度. 我接受他人对我的攻击, 但不接受诽谤.
@Comphuse

感谢. 但我记错了, 我说的字符串应该是之前使用 cygwin 的时候看到的...... 不过我还是有一些问题, 希望你不吝赐教, 谢谢.

Step 1. 新建一个用户 testuser, 密码为 v2exdiscuss, 我可以在 /etc/passwd 里找到:

testuser:x:1001:1001::/home/testuser:/bin/bash


Step 2. 我可以在 /etc/shadow 里找到:

testuser:$6$m76FBSOe$jvvb1T7kwCRof//Gyqd8UD7Y03J5/rFXdZeF/BSsCB0weQJrsENaRSOqQjoNrWpbCobEq5rBJ.jZyrzD63xBt1:16780:0:99999:7:::

Question 1. 在 Step 1.和 Step 2.中显示的内容, 分别有什么含义? '$', ':', '.'代表什么? (字符'$',
':', '.'不属于 ANSI, 因此不会是编码的一部分). 似乎和 PAM 有关?

-------------------------------------------------------------------------------

Question 2. 在 /etc/passwd 中还可以找到许多内容, 例如

1) bin:x:1:1:bin:/bin:/sbin/nologin
2) sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

为什么这些内容会与用户信息放在一起? 他们有什么含义?

--------------------------------------------------------------------------------

Question 3. 在 /etc/shadow 中还可以找到许多内容, 例如

1) bin:*:16231:0:99999:7:::
2) sshd:!!:16258::::::

这些内容和 Question 2.中的内容是成对的, 如果不是密码, 他们有什么意义吗?

--------------------------------------------------------------------------------

我没用过 shadow-utils, 不太清楚它的用处......

--------------------------------------------------------------------------------

$ uname -r

4.1.5-x86_64-linode61

$ cat /etc/*release

CentOS Linux release 7.1.1503 (Core)
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

CentOS Linux release 7.1.1503 (Core)
CentOS Linux release 7.1.1503 (Core)
2015-12-11 22:16:28 +08:00
回复了 Sequencer 创建的主题 V2EX V2 上撕逼越來越嚴重了,要不弄一個 git 來雲 block?
@mornlight
对一个人的看法, 和自己的世界观有很大关系. 例如, 个人看法: 很多比较年轻的用户在与别人讨论问题时总是刻意使用网络词汇, 以及网络句式, 显得非常不正式, 因为这里是一个有年龄跨度的社区, 而不是年轻人集中的社区, 与别人讨论时应该注重语气的恰当性与正规性.

就我个人而言, 我不喜欢 V2EX 上的一些 90 后, 我希望在讨论一个技术问题时, 能够使用正式的语文文体来交流, 而不是我在动漫论坛, 游戏论坛上看到的那些略显"时尚"的语气和措辞. 况且, 就我个人认为, 有些人连中国话都说不好, 不懂得如何用正式的文体与别人交流问题.

这一点, 我很喜欢老外的风格, 例如, 如果讨论的问题是: Python 在并发上有性能问题.
1) 某些人的回答可能是: 你知不知道 Python 完爆 XXX 语言十条街? XXX 网站都用 Python 我会乱说?
2) 老外的回答可能是: 尽管我知道 Python 可能会有许多潜在的问题, 但仍不可否认, Python 是一门广泛在有并发需求的情形下使用的语言.

类似于 1)形式的回答, 看一两遍就算了; 但有些人整天就是这种语气在和别人说话, 看了就来气. 有一次我在一个帖子下回复, "新生代程序员, 特别是看动漫的, 有些人不太正常", 被喷了很多楼. 想不通......

相反, 我并不排斥不友善内容, 我认为与别人争论问题时的气血方刚, 很可能是性格使然, 即使脏话出口, 也可以理解.
2015-12-11 16:19:11 +08:00
回复了 dododada 创建的主题 Redis 怎么查看哪个进程在操作 redis
@cmingxu 6379 是什么?
@Comphuse 不在电脑前。 Linode & CentOS7
2015-12-10 19:59:26 +08:00
回复了 Feiox 创建的主题 问与答 有没有人了解过“火端搜索”这个毒瘤一般的东西?
火端搜索不是做搜索的吗?怎么和 seo 有关?
2015-12-10 19:58:45 +08:00
回复了 Slienc7 创建的主题 站长 某些恶心的 SEO 站正在全球范围内污染中文搜索结果
火端搜索不是做搜索的吗,怎么和 seo 有关系?
@Mark24 但我可以在 passwd 里见到一串 ANSI 串(就是 Aa6BkIGGJK0 这样的)
passwd 里面没密码吗?那串 ANSI 是什么?
1  2  3  4  5  6  7  8  9  10 ... 18  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1416 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 28ms · UTC 23:52 · PVG 07:52 · LAX 16:52 · JFK 19:52
Developed with CodeLauncher
♥ Do have faith in what you're doing.