Home SDP SPA(单包认证)项目fwknop认证流程分析

 Fwknop version:2.6.8

使用RijndaelHMAC加密方式的认证流程。

Fwknop Client

一、生成密钥

HMAC KEY:

1、获取用户指定的HMAC摘要类型(default:SHA256)

                    2、获取对应摘要长度为hmac_klen.

              3、生成hmac_klen长度的随机字符串作为key

                    4、将key通过base64编码。

Rijndael KEY:

1、  获取用户指定的klen

2、  生成klen长度的随机字符床作为key

3、  keybase64编码。

二、生成SPA认证包

1、  生成access_buf,格式化为:

allow_ip+”:”+access_str(allow_ip:请求认证的IPaccess_str:请求开放的服务/端口)

2、  构造认证消息(message),格式化为:

随机字符串+”:”+base64编码的用户名+”:”+时间戳+”:”+版本信息+”:”+SPA类型值+”:”+base64编码的access_buf+”:”+base64编码的NAT信息(可选)+”:”+base64编码的server_auth字段(可选)+”:”+认证超时时间(可选)。

3、  通过用户指定的digest_type(default:SHA256)计算message的摘要数据。

4、  saltmessagedigest组合,格式化为:

“Salted__”+message+”:”+digest

5、  根据之前生成的密钥对4进行Rijndael算法加密。

6、  对密文进行base64编码,并截断编码中的等号。

7、  计算Rijndael密文的HMAC摘要。

8、  HMAC摘要编码为base64格式并截断等号。

9、  HMAC摘要追加到Rijndael密文后,并添加等号。

三、发送UDP SPA认证包

1、           确定发送数据spa_data,若是Rijndael加密形式则忽略前10个字节,若是GPG加密,则忽略前2个字节(去掉salt)。

2、           随机生成源端口,随机生成目的端口(可选)。

3、           发送spa_data

Fwknop Server

一、监听指定协议和端口

二、解析SPA报文

1、  获取报文的来源和目的地址。

2、  匹配数据段前10(或2)字节是否和预留salt一样,相同则丢弃此数据包。

3、  检测数据段是否为base64编码格式,否则丢弃。

4、  从第一个stanza开始检查,若来源IP在允许访问的IP范围内,则进行后续操作。

5、  还原加盐密文,头部添加salt

6、  取出数据段中的HMAC摘要,重新计算message密文的HMAC摘要,验证是否一致。用这种方式来匹配客户端对应的stanza

7、  检测message加密类型,并解密。

8、  检测是否收到重放攻击报文。

9、  查看SPA中是否存在timeout字段,没有则用access.conf中设置的认证超时字段。

10、              查看SPA中的时间戳,与本机比对,差值不得超过设定值(default:120s)。

11、              若在access.conf中的REQUIRE_USERNAME字段被设置,需确保usernameSPA中可被匹配。

12、              生成并配置iptables规则。

 

SPA数据包结构图:

SPA.png

打赏
0 comment

You may also like

Leave a Comment

*

code

error: Alert: Content is protected !!