身份认证一直就是一个麻烦的问题。互联网时代,每个论坛注册一个用户名密码让人很烦恼,于是出现了OAuth,允许用户通过第三方网站(例如Google、Facebook、微博、QQ、微信)来认证自己,但仍然需要第三方公司的信任背书。 即将到来的区块链时代,能不能通过区块链相关的技术解决这个问题呢?当然方法有很多种,例如 blockstack 和其上的 onename ,就是尝试通过虚拟链来解决这个 问题的,而 崛起币 则通过区块链自身的键值对功能衍生出ssh登录和ssl身份验证。笔者认为,基于区块链的身份认证系统,在很长一段时间内,仍然是多种系统并存的,取决于市场竞争中哪个区块链会胜出。

我想设计一种基于现有区块链的互联网身份识别系统,初期包括比特股和Steem。网站和用户直接通过区块链自身作为公信第三方,互相知道对方的账号。在这个基础上可以做很多增值的应用,例如打赏和优惠券发放啥的。

静态部署图如下:

以bitshares为例,核心步骤是:

  1. 用户通过链外(https)报告自己的账号到服务器。
  2. 服务器通过自己的比特股账号向用户的账号发起一个特殊转账,包含加密的备注。
  3. 用户接收转账,确认了服务器的账号。
  4. 用户通过私钥解开转账的备注消息,并从链外通过服务器的公钥加密发给服务器。
  5. 服务器从链外收到用户发来的备注,用私钥解密,与自己之前发送的备注比较,确认了用户身份是否伪造。
  6. 互相就就确认对方了,再加cookie啥的避免重复认证。
  7. 其他增值应用功能都,通过私钥区块链广播,发起交易。

不妨把这个过程故事化了。假设张三想要访问一个李四做的论坛,但首先李四想要知道张三就是张三,张三也要知道李四就是李四,还好双方都在bitshares上注册了账号,分别就是张三和李四,于是借助于bitshares这个区块链和本文讨论的身份验证系统,一步一步达到了互相认证的目的。 张三首先访问了一个论坛网站,由于浏览器没有任何记录,上面出现一个按钮,写着“通过bitshares登录”,张三觉得这个按钮不错,于是点了一下。点过之后出现一个界面,要求张三用恢复bitshares钱包的方法来在这个域名下恢复钱包,于是张三恢复了自己bitshares钱包,并且把账号告诉 了网站服务器,网站服务器不知道张三真的是否注册或者就是张三,于是告诉访问者,我是李四,通过安全手段(bitshares)你转一笔小钱,里面还有一个暗号,你注意收下,并且把暗号再告诉我;服务器同时按照这个说法给张三转账。张三在区块链上监听来着李四的转账,果然收到了,并且看到了暗号,于是他 又把暗号通过链外告诉服务器。通过这个交互,张三知道服务器控制了李四这个身份,服务器知道使用服务的人就是张三,张三在浏览器上重定向到论坛的页面,并且有了浏览器本地的钱包。在最后一个交互(张三发确认暗号)中,服务器记录张三,并且发送cookie给张三使用的浏览器,用来确认后续链外行为是张三本人做的。

以上讨论正常流程,下面说下哪些分支流程会导致认证失败。

  1. 张三不相信在另一域名下解开bitshares钱包。这个无法在系统内解决,也许硬件钱包是一个好办法。
  2. 张三欺骗服务器,说自己叫张四,可是由于张三没有张四的私钥,就无法解开服务器发送转账的备注,因此服务器就知道认证失败了。
  3. 服务器欺骗张三,说自己叫李三,可是服务器无法以李三的名义发送转账,因此张三的浏览器就知道服务器撒谎了。
  4. 任何步骤超时,认证也会失败。

最后,考虑这个问题:如何防止DDoS攻击?由于服务器发送转账有成本,而一开始声称自己是谁的客户端没有成本,因此可以用这个方法欺骗服务器做无效的转账。这个应该通过多方面来防范:

  1. 链外做流量限制
  2. 链上,发行仅用于认证目的的没有什么价值的用户自定义资产
  3. 同一个用户切换浏览器后,可以复用之前的转账过程,而仅仅做链外的密文交换就可以知道对方的身份了

写到这里,我的脑子里突然又浮现了另一种想法,那就是无须在链上转账就能通过链下的声明和公私钥信息交换就可以认证对方了,岂不是更妙?不过还没有完全成形,等想好了下回再发一篇文章。

基于bitshares的身份认证系统设计思路相关推荐

  1. 基于token与基于服务器的身份认证

    基于token与基于服务器的身份认证 1.基于服务器的身份认证 我们清楚 http 协议是无状态的,也就是说,如果我们已经认证了一个用户,那么他下一次请求的时候,服务器不知道我是谁,我们就必须要再次认 ...

  2. 基于 OpenSSH 的身份认证与密钥管理

    文章目录 1. SSH KEY 1.1 SSH密钥是一个认证凭证 1.1.1 授权密钥(Authorized Key) 1.1.1 身份密钥(Identity Key) 1.1.3 基于证书的用户认证 ...

  3. Web应用中基于密码的身份认证机制(表单认证、HTTP认证: Basic、Digest、Mutual)

    Web应用中基于密码的身份认证机制 背景概念 认证(Authentication) 会话管理 1 表单认证(Form-Based Authentication) 1.1 介绍 1.2 流程 2 通用的 ...

  4. Flask中基于Token的身份认证

    目录 下面是基于Token的身份认证的具体实现步骤 下面是一个基于Token的身份认证的示例代码 客户端请求示例 Flask提供了多种身份认证方式,其中基于Token的身份认证是其中一种常用方式.基于 ...

  5. signature=4f0a1c9773fc07031e260b016c514c92,基于LDAP的统一身份认证系统设计与实现

    摘要: 随着IT技术和网络技术的蓬勃发展,各种基于网络的应用系统已在当前的商业环境中大量存在.因商业应用业务需要,用户每天可能需要登录到许多不同的应用系统.为保证安全性,通常各系统均要求对用户进行身份 ...

  6. asp net html.dropdownlist viewdata 指定选中项_ASP.NET Web API基础(05)--- 基于JWT的身份认证 - 高原秃鹫...

    5.1 Web API中的过滤器 WebApi下的过滤器和MVC下的过滤器有一些区别. (1)       所处命名空间不同. Web API 过滤器额命名空间是"",而MVC过滤 ...

  7. 宽带门户网站身份认证系统设计

    http://9host.cn/JSP/200742218371612353.html 摘 要 研究了湖南铁通宽带门户网站身份认证系统的功能需求,从统一认证.认证安全性和通用性等方面提出了一套全面的解 ...

  8. Python+OpenCV人脸识别身份认证系统设计:专栏总述

    本专栏依托于Python编程语言,在内容上尽可能涵盖了人脸识别的各个技术模块,从人脸数据采集.数据预处理.数据分析.人脸识别模型的训练到最后的人脸识别,均有详细的操作步骤和注释代码,能帮助学习者从零开 ...

  9. labview的用户身份认证系统设计_elasticsearch 集群身份认证与用户鉴权

    elasticsearch在默认安装后,没有提供任何安全保护. 在elasticsearch.yml配置了server.host=0.0.0.0导致公网可以访问es集群. 数据安全的基本需求: 1.身 ...

最新文章

  1. ASP.NET中树形图的实现
  2. 英伟达吞并Arm失败!英美欧盟一齐干涉,老黄还要给孙正义12.5亿美元分手费
  3. 网络推广是做什么的教你在网站优化中正确处理死链的技巧!
  4. 谷歌guava_Google Guava BloomFilter
  5. 防红直连php,【源码资源】20新PHP网址缩短防封防红短网址生成系统
  6. 怎么编程安装字体文件
  7. 同样是百度输入法,定制远没有原版好用
  8. 基于单片机的电子琴设计和硬件平台设计
  9. win10开始菜单卡住没反应,其他都没问题 看视频也没问题。
  10. C#高级编程——C#扩展方法+接口,定义统一的搜索接口,基于Unity(三)——图文详解加源码
  11. Verilog HDL 总结(1)
  12. mysql报错1593_主从复制报1593错误的处理
  13. (算法篇)Java实现删除链表倒数第n个节点
  14. iOS App完整项目
  15. fred.V7光线追迹软件
  16. ssm毕设项目丢失宠物发布找寻平台7nk4i(java+VUE+Mybatis+Maven+Mysql+sprnig)
  17. 智能泊车进入「搭载率」攀升期,年度竞争力TOP10供应商榜单发布
  18. 线段树简单入门 (含普通线段树, zkw线段树, 主席树)
  19. TLS协议分析 与 现代加密通信协议设计
  20. STM32上移植ds1307笔记

热门文章

  1. 海思芯片文件及查看方法
  2. 基于功能连接的认知机器学习预测模型:特征权重可靠吗?
  3. 工作记录:举步维艰的在线 word 之旅 - tinymce
  4. windows下git客户端的下载安装及使用教程
  5. GPU上的随机森林:比Apache Spark快2000倍
  6. 呼叫中心系统对于电销企业有多重要
  7. 数据链路层功能概述、封装成帧与透明传输
  8. quartz获取开始结束时间_quartz核心元素及底层原理介绍
  9. 【openCV边缘检测】用传统方法实现边缘检测(一)提取边缘
  10. windows运行快捷命令