- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近,我能够按照以下两个网站上的说明在 Swift IOS 中获得适用于 XMPP 流的 MD5 身份验证(我使用 Apple 的 CommonCrypto C 库的 CC-MD5 函数进行实际散列):
http://wiki.xmpp.org/web/SASLandDIGEST-MD5
http://www.deusty.com/2007/09/example-please.html
我正在寻找有关如何使其他散列 SASL 身份验证方案工作的类似解释,尤其是 SCRAM-SHA1。我找到了官方RFC5802文档,但我在理解它时遇到了很多麻烦(它也不是 XMPP 特有的)。我希望有一个更简单的解释或一些简单易读的代码(C、PHP、C++、Javascript、Java)特定于 XMPP 身份验证,这些代码除了实际散列之外不使用任何库。
我有兴趣了解该过程,并且不打算使用 ios XMPP-Framework。任何帮助,将不胜感激。
最佳答案
SCRAM-SHA-1
这种机制如何工作的基本概述是:
normalizedPassword
.这是为了确保 UTF8 编码不能包含相同密码的变体。 clientNonce
. initialMessage
是 "n=" .. username .. ",r=" .. clientNonce
(我使用 ..
进行字符串连接)。 "n,,"
) 添加到 initialMessage 并对结果进行 base64 编码。它将此作为它的第一条消息发送:<auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="SCRAM-SHA-1">
biwsbj1yb21lbyxyPTZkNDQyYjVkOWU1MWE3NDBmMzY5ZTNkY2VjZjMxNzhl
</auth>
<challenge xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
cj02ZDQ0MmI1ZDllNTFhNzQwZjM2OWUzZGNlY2YzMTc4ZWMxMmIzOTg1YmJkNGE4ZTZmODE0YjQyMmFiNzY2NTczLHM9UVNYQ1IrUTZzZWs4YmY5MixpPTQwOTY=
</challenge>
r=6d442b5d9e51a740f369e3dcecf3178ec12b3985bbd4a8e6f814b422ab766573,s=QSXCR+Q6sek8bf92,i=4096
r=
这是serverNonce
.客户端必须确保它以 clientNonce
开头。它发送了它的初始消息。 s=
这是salt
, base64 编码(是的,这是 base64 编码两次!)i=
这是迭代次数,i
. clientFinalMessageBare = "c=biws,r=" .. serverNonce
saltedPassword = PBKDF2-SHA-1(normalizedPassword, salt, i)
clientKey = HMAC-SHA-1(saltedPassword, "Client Key")
storedKey = SHA-1(clientKey)
authMessage = initialMessage .. "," .. serverFirstMessage .. "," .. clientFinalMessageBare
clientSignature = HMAC-SHA-1(storedKey, authMessage)
clientProof = clientKey XOR clientSignature
serverKey = HMAC-SHA-1(saltedPassword, "Server Key")
serverSignature = HMAC-SHA-1(serverKey, authMessage)
clientFinalMessage = clientFinalMessageBare .. ",p=" .. base64(clientProof)
clientFinalMessage
并将其作为响应发送:<response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
Yz1iaXdzLHI9NmQ0NDJiNWQ5ZTUxYTc0MGYzNjllM2RjZWNmMzE3OGVjMTJiMzk4NWJiZDRhOGU2ZjgxNGI0MjJhYjc2NjU3MyxwPXlxbTcyWWxmc2hFTmpQUjFYeGFucG5IUVA4bz0=
</response>
<success>
来自服务器的响应: <success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
dj1wTk5ERlZFUXh1WHhDb1NFaVc4R0VaKzFSU289
</success>
v=pNNDFVEQxuXxCoSEiW8GEZ+1RSo=
v
的值是 serverSignature
的 base64 编码. salt
和 i
值,那么客户端只能存储 saltedPassword
而不是用户的密码。这更安全(因为客户端不需要存储密码,只是一个难以反转的加盐哈希)并且更快,因为客户端不需要每次都进行所有的 key 拉伸(stretch)。salt
, i
, storedKey
和 serverKey
.更多信息 here . salt
做任何假设(尽管如果您生成它们,请确保它们足够长且加密随机)。 salt
是 base64 编码的,可以包含任何数据(嵌入 NUL
s)。 initialMessage
authMessage
的一部分不包括 GS2 header (在大多数情况下,这是 "n,,"
)。 user
pencil
fyko+d2lbbFgONRv9qkxdawL
n,,n=user,r=fyko+d2lbbFgONRv9qkxdawL
3rfcNHYJY1ZVvWVs7j
r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,s=QSXCR+Q6sek8bf92,i=4096
4125c247e43ab1e93c6dff76
c=biws,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j
1d96ee3a529b5a5f9e47c01f229a2cb8a6e15f7d
e234c47bf6c36696dd6d852b99aaa2ba26555728
e9d94660c39d65c38fbad91c358f14da0eef2bd6
n=user,r=fyko+d2lbbFgONRv9qkxdawL,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,s=QSXCR+Q6sek8bf92,i=4096,c=biws,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j
5d7138c486b0bfabdf49e3e2da8bd6e5c79db613
bf45fcbf7073d93d022466c94321745fe1c8e13b
0fe09258b3ac852ba502cc62ba903eaacdbf7d31
ae617da6a57c4bbb2e0286568dae1d251905b0a4
c=biws,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,p=v0X8v3Bz2T0CJGbJQyF0X+HI4Ts=
v=rmF9pqV8S7suAoZWja4dJRkFsKQ=
ae617da6a57c4bbb2e0286568dae1d251905b0a4
关于authentication - XMPP SASL SCRAM-SHA1 认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29298346/
我有操作系统 Red Hat Enterprise Linux Server release 7.4 (Maipo) 和 python Python 2.7.13 :: Anaconda 4.4.0
我在我的 Bluemix 应用程序中安装 sasl 时遇到以下错误: Installing collected packages: sasl, thrift-sasl
我正在处理有关 IM 的一些事情。它涉及XMPP。我在 Android 上开发了一个应用程序,所以我使用了 aSmack。我想登录 google talk,在这里(链接如下) https://deve
注意:我无法安装 libsasl2-dev,因为我没有管理员权限。 我构建了 cyrus-sasl-2.1.26.tar.gz: ./configure --prefix=/home/username
我对上述主题有几个问题,请你能帮助理解这些事情。 SASL/Plain 可以与 SSL 一起使用,也可以不与 SSL 一起使用。因此,如果不使用 SSL,则数据将被加密 和安全? 使用 SSL 的 S
尝试将 Message Hub Bluemix 服务与 Node 一起使用时,我收到错误:无法初始化 SASL 身份验证:SASL 握手失败(启动 (-4)):SASL(-4):没有可用机制:没有找到
我正在尝试将新用户添加到 SASL 数据库: saslpasswd2 -a memcached -c . 一旦我重复密码,我会收到以下错误: saslpasswd2: generic failur
我正在做一个涉及身份验证的项目,我不太明白 SASL 和 gssapi 之间的区别。 gssapi 是否在 SASL 的掩护下使用?我可以在没有 SASL 的情况下使用 gssapi 吗?正确的做法是
我正在尝试设置 SVN 以针对 ActiveDirectory 进行身份验证。我知道如果您将 SVN 设置为使用 Apache 提供服务,这是可能的,但这样做会引入太多开销,并且 SVN 运行速度太慢
为什么导入 javax.security.sasl.Sasl;不适用于 Android ???? 最佳答案 这不是 Google Android SDK 团队决定提供的 sun jdk 的一部分。支持
我已经在我的系统中配置了 svn 服务器,并为使用 SASL MD5 验证用户进行了以下配置。我在 svnserve.conf 中做了以下更改 [general] anon-access = no
我尝试在 Spring Boot 项目中设置一个 Mongo DB。我在 application.yml 中设置了一个 uri: spring: data: mongodb:
在我的代码中,在创建 TIdIMAP4 连接之前,我设置了一大堆 SASL 机制,希望按照规定的“最好到最差”顺序,如下所示: IMAP.SASLMechanisms.Add.SASL := mIdS
我们在 Windows Server 2008 上运行 RabbitMq 3.6.2 和 Erlang 17.4。我们在 sasl 日志中一遍又一遍地看到以下记录。它偶尔发生(每隔几个小时),没有特定
当我的应用程序崩溃时,我会收到一份需要 5 分钟滚动浏览的崩溃报告。处理这个问题的最佳方法是什么? 最佳答案 您可以将故障转储通过管道传输到文件。重要信息可能在顶部。 您可以按照 Hynek 上面所说
与许多 RabbitMQ 用户一样,我在 RabbitMQ 节点上看到一些大的 [MACHINE_NAME]-sasl.log 文件,除了 =PROGRESS REPORT==== 条目外什么都不包含
CentOS6.6、Postfix、dovecot 2.0.9 和 MySQL 5.1.73 dovecot 配置(/etc/dovecot/dovecot-sql.conf.ext): driver
我正在尝试制作一个 java 类,以便根据本地 SASL 对用户进行身份验证。我的 saslauthd 配置是这样的: $ cat /etc/sysconfig/saslauthd # Directo
我正在尝试在 ec2 两个实例上设置 zookeeper。如给定 here和 here . 我正在尝试运行因错误而失败的 zookeeper: 命令:bin/zkCli.sh -server loca
在 Zookeeper 和代理身份验证上启用 SASL 时,我遇到以下错误。 [2017-04-18 15:54:10,476] DEBUG Size of client SASL token: 0
我是一名优秀的程序员,十分优秀!