gpt4 book ai didi

security - 带时间窗的 HMAC

转载 作者:数据小太阳 更新时间:2023-10-29 03:17:09 37 4
gpt4 key购买 nike

我正在使用基于 UTC+0 同步时间的时间窗口机制对 HMAC 进行一些测试。服务器有一个特殊的公共(public) API 调用 http://myserver.com/api/servertime/,它将返回服务器的确切 UTC+0 时间。通过这种方式,API 用户可以同步他们的请求客户端,以便它能够匹配我的 API 允许安全调用的时间窗口。我建立了一个 30 分钟的时间段(-15min - +15min)。

我的代码是这样的:

func GenerateHmac512(message []byte, key []byte) []byte {
h := hmac.New(sha512.New, key)
h.Write(message)
return []byte(base64.StdEncoding.EncodeToString(h.Sum(nil)))
}

func ValidateHmac512(message, messageMAC, key []byte) bool {
var err error
decryptedMessageMAC, err := base64.StdEncoding.DecodeString(string(messageMAC))

if err != nil {
log.Fatalln(err.Error())
return false
}

mac := hmac.New(sha512.New, key)
mac.Write(message)
expectedMAC := mac.Sum(nil)
return hmac.Equal(decryptedMessageMAC, expectedMAC)
}

func main() {
timestamp := time.Now().Unix()
key := []byte("afad9411468602782fb62d904f623d87")
message := []byte(fmt.Sprintf("SecretHash,Value1,Value2,Value3,TimeStamp:%d", time.Now().Unix()))
hmacHash := GenerateHmac512(message, key)
hmacValid := ValidateHmac512(message, hmacHash, key)
log.Println(timestamp)
log.Println(string(hmacHash))
log.Println(hmacValid)

requestValid := false

if timestamp > time.Now().Unix()-(60*15) && timestamp < time.Now().Unix()+(60+15) {
requestValid = true
}

log.Println(requestValid)
}

我正在对将在我的 HMAC 哈希中的调用中公开提供的时间戳与 secret 哈希进行哈希处理。我想知道这是否足够万无一失,还是需要更多的工作才能使其完全可靠?调用将是这样的:

POST http://myserver.com/api/users/
Value1 : Data1
Value2 : Data2
Value3 : Data3
Timestamp : 1420497639

最终当一切正常时,我将通过 SSL/TLS 发送这些数据。我知道 SSL 绰绰有余,不需要 HMAC,但我喜欢拥有这 3 层安全性。我想对这些层的变化进行基准测试,以了解性能影响是什么,以及我如何调整它以在性能和安全性之间取得良好的平衡。

最佳答案

这里没有太多要回答的,HMAC 对消息进行身份验证并验证完整性,这似乎就是您想要的。此外,如果您要对客户端进行身份验证,TLS 仅“绰绰有余”。如果这是一个未经身份验证的调用,那么 HMAC 仍然有理由证明共享 secret 的知识。

请注意,SecretHash 是多余的。您已经拥有 secret 共享 key 。

关于security - 带时间窗的 HMAC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27789310/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com