V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
sNullp
V2EX  ›  分享创造

做了一个基于 Google OAuth 的密码管理器雏形,求分析安全性

  •  
  •   sNullp ·
    sNullp · 2014-07-31 08:20:01 +08:00 · 3158 次点击
    这是一个创建于 3802 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Github: https://github.com/snullp/goPwd
    Demo: https://pwd.bigsquirrel.me

    希望回复有理有据,高质量的分割线----------------

    这个管理器的思路是通过OAuth获得一个Unique的MasterKey,然后用一个密码生成算法 根据(Entity name,MasterKey,Options)来生成密码。

    管理器不使用数据库,减少了被脱库的风险。

    假设服务器的filesystem content和memory content是安全的。

    整个环节,因为生成算法是公开的,所以唯一需要注意的就是MasterKey。目前MasterKey是存在php的session里的,可以被认为是安全的吧?
    MasterKey 是由Google的 UID(google account对应的唯一id)和 Google OAuth后端id(每个人都可以申请) 结合后哈希生成的。所以需要 Google OAuth后端id 保密(后端id需要存在config file里)。目前的设计上看在这点上是否有疏忽?
    11 条回复    2014-07-31 13:16:33 +08:00
    yangqi
        1
    yangqi  
       2014-07-31 08:39:10 +08:00   ❤️ 1
    sNullp
        2
    sNullp  
    OP
       2014-07-31 08:41:25 +08:00
    @yangqi 感谢。
    不过 Google 的后端和我的代码里都做了相应的处理,文中的问题应该不会出现。
    sNullp
        3
    sNullp  
    OP
       2014-07-31 08:47:32 +08:00
    @yangqi Google will verify redirect_url parameter and block unauthorized redirection in their side. Also, in my code, api/auth.php will also check if the token is returned by Google.
    shyrock
        4
    shyrock  
       2014-07-31 11:27:34 +08:00
    最好有个示意图说明这个密码的生成方法和使用方法。。。
    sNullp
        5
    sNullp  
    OP
       2014-07-31 11:30:11 +08:00
    @shyrock 呃。。什么是密码的使用方法。。
    生成方法,就是登录后输入网站名就吐给你一个密码。。
    shyrock
        6
    shyrock  
       2014-07-31 11:36:15 +08:00
    @sNullp 然后呢,这个密码每次都不一样?怎么存储?
    sNullp
        7
    sNullp  
    OP
       2014-07-31 11:49:28 +08:00
    @shyrock 。。。每次是一样的。。
    “用一个密码生成算法 根据(Entity name,MasterKey,Options)来生成密码”

    所以不需要存储
    mcfog
        8
    mcfog  
       2014-07-31 12:27:05 +08:00
    http://www.passwordmaker.org/ 用户路过,表示根本不需要什么中心服务器
    sNullp
        9
    sNullp  
    OP
       2014-07-31 12:35:26 +08:00 via iPhone
    @mcfog exactly这个思路,只是做成了php的版本
    rankjie
        10
    rankjie  
       2014-07-31 13:03:17 +08:00   ❤️ 1
    看了下 https://github.com/snullp/goPwd/blob/master/include/Generators/naive.pwdGen.php ,所以就是对于但以用户而言,密码目前只是根据名称来计算出唯一值,那么就有以下问题需要改进:

    1:假设我要修改某站点的密码,那么我就必须改名称才行了,不过这是小问题... options 利用起来就好了

    2:公开的算法,然后唯一凭证就是 Google OAuth后端id 和 Google的 UID ,为什么你相信这两组数据是被保密的呢?我看不出这两个 id 对于 Google 而言有什么需要保密的地方
    sNullp
        11
    sNullp  
    OP
       2014-07-31 13:16:33 +08:00 via iPhone
    @rankjie 感谢回复,想换密码必须要换算法,比如换个字典。。

    uid根本就不是保密的。但后端id配有一个secret,那个secret应该是保密的。。写在配置文件里。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1074 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:09 · PVG 03:09 · LAX 11:09 · JFK 14:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.