SCRAM(Salted Challenge Response Authentication Mechanism),MongoDB自3.0版本开始使用SCRAM作为其默认的安全认证机制,取代了之前使用的MONGODB-CR。
这篇文档主要说明的是SCRAM认证机制的设计原理和安全性。

背景

在介绍SCRAM之前,还需要介绍下MongoDB的认证。MongoDB不保存明文密码,它的认证要求客户端(Client)提供自身合法性的依据,在3.0版本中,有3种认证机制:

  1. 基于密码的认证(Password-based authentication):客户端通过证明预先持有的加密值来验证身份。SCRAM-SHA-1仍采用这种机制。
  2. 基于证书的认证(Certificate-based authentication):客户端通过使用x.509认证签名的受信证书实现身份验证。
  3. 第三方认证:客户端通过外部第三方服务实现身份验证,例如Kerberos、LDAP等。

1.1 挑战-应答协议(Challenge-Response Protocols)

在3.0版本中使用了一种新的基于密码认证协议,即挑战-应答协议(Challenge-Response Protocols)。该协议的原理是服务器对客户端的连接请求都会发起一个问答过程,客户端需要在回应中证明自己知道真正的密码。这就像是一个程序员找工作去面试,他不需要在面试现场直接手撸一个系统什么的,最重要的是把思路方法、问题点和解决方案等等细节表达清楚,这样才能让面试官相信眼前的这位面试者能胜任这个岗位的工作。

挑战-应答协议也是这么回事,它需要客户端来自证身份。这种协议的好处显而易见,假的真不了,防范了重放攻击(replay attacks)。那么同样采用了挑战-应答协议的SCRAM不仅能做到这一点,它还采用了其他的安全机制以实现防范其他类型的安全攻击。

1.2 威胁模型(Threat Model)

我们假定黑客可以捕获和生成任意网络流量(事实也是如此),并检查服务器的磁盘存储内容,同时假设他在运算方面受到限制,因为他也无法突破任何标准密码原语,比如安全哈希函数。

以下是根据以上威胁模型对SCRAM的一些安全威胁场景。这些都是SCRAM的设计理由,并且实现了应对这些攻击的策略。

  1. 窃听(Eavesdropping):攻击者可以读取客户端和服务器之间交换的所有流量。为了防止窃听,SCRAM客户端从不在网络环境下以明文形式发送密码。
  2. 重放(Replay):攻击者可以将客户端的有效响应重新发送到服务器。SCRAM通过随机数(random nonces)保证每个认证会话唯一,因此协议消息仅对单个会话有效。
  3. 数据库泄露(Database Compromise):攻击者可以查看服务器持久内存的内容。通过在存储密码之前对密码进行salting和迭代哈希,可以降低数据库泄露的风险。
  4. 服务器伪装(Malicious Server):攻击者可以充当客户端的服务器。攻击者无法在不知道客户端SCRAM凭证的情况下冒充服务器。

SCRAM

2.1 协议图(Protocol Diagram)

  1. 客户端启动SCRAM身份验证会话
  2. 服务端发起challenge应答
  3. 客户端响应challenge,提供proof
  4. 服务端验证客户端的proof,并提供自己的proof
  5. 客户端验证服务端的proof

2.2 参考资料

具体的加密过程点我查看。
SCRAM对安全攻击的防范点我查看。

MongoDB默认使用的SCRAM-SHA1认证机制相关推荐

  1. php mongo 认证,MongoDB 认证机制升级

    早上某php开发反映新搭建的 mongodb 副本集连不上,后发现是认证问题导致的. 具体的报错信息如下: 2019-07-11T10:31:38.142+0800 I ACCESS [conn191 ...

  2. 没文档也要扒源码让 ShardingSphere 支持 openGauss SCRAM 前端认证

    记录自己如何在没有协议文档的情况下,根据 openGauss JDBC Driver 源码,让 ShardingSphere openGauss Proxy 支持 openGauss 的 SCRAM ...

  3. Kafka 如何给集群配置Scram账户认证

    前言 很早之前的一篇博客[Kafka+ Centos7服务器集群详细安装教程] 详细的说了下一个真正的集群应该如何搭建Kafka环境,由于当时的需求只是能够使用Kafka服务,因此并没有做别的什么配置 ...

  4. Node.js数据库与身份验证(MySQL,前后端身份认证:Session 认证机制,JWT认证机制)

    目录 MySQL SQL 语句语法 where 条件.and 和 or 运算符.order by 排序.count(*) 函数 在express项目中操作 MySQL 安装与配置 mysql 模块 1 ...

  5. SSO 认证机制对比

    2019独角兽企业重金招聘Python工程师标准>>> SSO 认证机制对比 博客分类: 架构 几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth简单 ...

  6. mongodb默认的用户名密码_MongoDB 设置账号和密码

    https://www.cnblogs.com/mengyu/p/9071371.html 一.安装MongoDB 1.环境配置: i.操作系统:CentOS release 6.8 (Final) ...

  7. 常用的认证机制之session认证和token认证

    一.session认证 1.session认证的过程: 前端输入用户名和密码进行登录操作,后端拿到用户名和密码后,会把md5进行加密,加密之后,拿上加密后的密文到用户表中查找密文是否一致,判断用户是否 ...

  8. (golang)HTTP基本认证机制及使用gocolly登录爬取

    内网有个网页用了HTTP基本认证机制,想用gocolly爬取,不知道怎么登录,只好研究HTTP基本认证机制 参考这里:https://www.jb51.net/article/89070.htm 下面 ...

  9. jwt重放攻击_【干货分享】基于JWT的Token认证机制及安全问题

    一步一步教你基于JWT的Token认证机制实现,以及如何防范XSS攻击.Replay攻击和中间人攻击. 文章目录 一.几种常用的认证机制 1.1 HTTP Basic Auth HTTP Basic ...

最新文章

  1. java.util.ResourceBundle使用详解
  2. Community Server专题一:概述Community Server
  3. 深度学习之基于Inception_ResNet_V2和CNN实现交通标志识别
  4. C++学习第二天(打卡)
  5. 创建war类型的maven工程时报web.xml is missing and failOnMissingWebXml is set to true
  6. python分布爬虫_13天搞定Python分布爬虫(第七天)(Scrapy)
  7. 设置视图IOS开发(97)之自定义视图之使用XIB自定义一个UIView
  8. 本地提交spark_spark快速入门(三)-------spark部署及运行模式
  9. 50个技巧提高你的PHP网站程序执行效率
  10. 【理论】浅解硬件网络通信+交换机芯片+通信系统设计
  11. 微软卷土重来 只收购雅虎搜索业务
  12. Hibernate用Query删除数据表中的数据的问题(EntityManager.clear())
  13. 我的世界服务器怎么改无限力量,我的世界无限力量效果指令,我的世界怎么用命令方块做无限的效果...
  14. 什么是Data Matrix二维码
  15. String spilt()方法
  16. javascript 基本用法
  17. Zabbix Trapper items
  18. 2018年区块链红黑榜-千氪
  19. 基于sklearn的软硬间隔以及各类核函数的SVM实现
  20. 视图概念,优缺点及作用

热门文章

  1. 无线充电仿真 simulink llc谐振器实现恒压输出 WPT
  2. \t\t12时辰养生
  3. 百度ocrapi接口的示范
  4. 计算机应用大学排名,计算机应用技术专业大学排名 2020全国排行榜
  5. 内网安全-域横向CSMSF联动及应急响应初识
  6. 您好呀 Git ,我是小二!
  7. Python之写一个函数用于字符串替换
  8. 全连神经网络的经典实战--MNIST手写体数字识别
  9. 利用IPv6实现公网访问远程桌面
  10. word中删除水平线(分割线)的方法