电信行业通过基于属性的加密(ABE)迈向后量子时代

本文介绍了属性加密(ABE)在电信行业后量子密码学中的应用,重点介绍了基于属性的加密(CP-ABE)的密文策略以及其在密钥封装机制(KEMs)中的应用,通过属性策略控制密钥的访问,以增强安全性。文章还提供了一个CP-ABE的示例代码和在线演示。

电信通过基于属性的加密(ABE)进入后量子时代

正如你可能知道的,一些电信行业在网络安全方面远远落后于世界其他地区,GSM 网络通常停留在较弱的密码学方法上。但由于量子计算机的威胁,这种情况正在发生变化。就在今天,欧洲电信标准协会 (ETSI) 发布了一个新的框架,该框架支持密钥封装机制 (KEM) [ 这里]:

该标准定义了一种混合方法,该方法支持前量子和后量子方法——被称为混合方法。有了这个,创建的密钥将被封装与用户属性,但这些属性是匿名的。因此,用户必须在封装策略中提供其属性,并且它将检索密钥。如果用户无法提供正确的属性,这些属性将无法访问目标密钥。

显然,某些用户可能具有相同的属性,例如 CTR(国家/地区)=EN、DPT(部门=DEV)和 SEC(安全)=LOW。为此,该方案使用一种跟踪设施,其中跟踪权限可以区分具有相同属性的用户。

KEMAC

通过 KEM(密钥封装方法),我们可以生成会话密钥,然后使用接受者的公钥保护它,以便私钥可以随后用于解密它。使用的方法是传统的公钥方法以及后量子鲁棒封装,它定义了混合方法。

过程是:

  • 密钥生成: (pk,sk) := Gen()⁡.
  • 封装: (k,c) := Encap(pk)
  • 解封: k:= Decap(sk,c)

我们可以看到 Alice 生成密钥对并将公钥传递给 Bob。然后,Bob 将封装 Alice 的公钥,这将生成一个密钥 (k) 和一个密码 (c)。Bob 将密码传递给 Alice,然后她使用密码和她的私钥解封此密码以显示密钥 (k)。

然后,基于属性的加密用于定义如何恢复密钥。如果属性不匹配,则无法恢复密钥。这样,可以应用策略来显示会话密钥。对于新的混合 KEM,我们使用 ciphertext-policy ABE (CP-ABE),它提供了良好的性能。

该方法定义为带有访问控制的 KEM (KEMAC),其中密钥通过密钥策略 (Y) 颁发,然后会话密钥通过封装策略 (X) 封装。然后,用户只有在 R(X,Y)=1 的情况下才能解封装会话密钥,其中 R() 是策略 X 和 Y 的布尔规则。这可以包括 AND、OR 和 NOT 运算。

CP-ABE

通过 CP-ABE,我们可以根据策略和一组属性生成加密密钥。在这种情况下,我们只能使用正确的属性生成正确的解密密钥。我们将实施的政策是:

((location: edinburgh) and (service: payment)) or (role: admin))

这意味着如果用户在爱丁堡并且正在进行付款,那么他们将能够解密加密的消息。如果他们具有“admin”角色,他们也可以解密它。所有其他情况都不允许创建加密密钥。

我们将使用的方法由 Tomida 等人定义 [1]:

通过此方法,我们创建一个公钥来加密我们的消息,然后创建一个密钥(私钥)来解密它。只有当用户可以提供所需的属性来匹配策略时,我们才能生成所需的私钥来解密加密的内容。然后,我们最终得到一个密钥策略 (KP) 并实施一个 ciphertext-policy (CP) ABE 方法。总的来说,处理 KP 是为了识别策略中的冗余部分,例如:

(location: edinburgh and service: payment) or (location: edinburgh or service:withdrawl)

它变为:

(location: edinburgh or service:withdrawl)

大纲代码是 [ 这里]:

package main
import (
 "bytes"
 "crypto/rand"
 "fmt"
 "log"
 "os"
 cpabe "github.com/cloudflare/circl/abe/cpabe/tkn20"
)
func checkPolicy(in map[string][]string) bool {
 possiblePairs := map[string][]string{
  "location": {"edinburgh", "glasgow", "stirling","aberdeen"},
  "service":    {"payment", "withdrawl", "balance"},
  "role":    {"admin", "production", "sales"},
 }
 isValid := func(key string, value string) bool {
  vs, ok := possiblePairs[key]
  if !ok {
   return false
  }

  for _, v := range vs {
   if value == v {
    return true
   }
  }

  return false
 }
 for k, v := range in {
  for _, value := range v {
   if !isValid(k, value) {
    return false
   }
  }
 }
 return true
}
func main() {
 argCount := len(os.Args[1:])
 msg := `Message`
 location:="edinburgh"
 service:="payment"
 role:="admin"
 policyStr := `((location: edinburgh) and (service: payment)) or (role: admin) `
    if (argCount>0) {msg= os.Args[1]}
    if (argCount>1) {location= os.Args[2]}
    if (argCount>2) {role= os.Args[3]}
 if (argCount>3) {service= os.Args[4]}
 if (argCount>4) {policyStr= os.Args[5]}

 attrsMap := map[string]string{"location":location, "service": service, "role": role}
 fmt.Printf("Policy: %s\n",policyStr)   // 策略
 fmt.Printf("Attributes. Location: %s, Service: %s, Role: %s\n\n",location,service, role)  // 属性。 位置:%s,服务:%s,角色:%s
 publicKey, secretKey, err := cpabe.Setup(rand.Reader)
 if err != nil {
  log.Fatalf("%s", err)
 }
 p,_:=publicKey.MarshalBinary()
 fmt.Printf("Public key (64 bytes): %+x\n",p[:64] )  // 公钥(64字节)
 p,_=secretKey.MarshalBinary()
 fmt.Printf("Private key (64 bytes): %+x\n",p[:64]  )  // 私钥(64字节)
 policy := cpabe.Policy{}
 err = policy.FromString(policyStr)
 if err != nil {
  fmt.Printf("\nError in policy")  // 策略错误
 }
 if checkPolicy(policy.ExtractAttributeValuePairs()) {
  fmt.Printf("\nPolicy works\n")  // 策略有效
 }

 ct, _ := publicKey.Encrypt(rand.Reader, policy, []byte(msg))

 attributes := cpabe.Attributes{}
 attributes.FromMap(attrsMap)
 SecretKey, _ := secretKey.KeyGen(rand.Reader, attributes)

 rightSat := policy.Satisfaction(attributes)
 if !rightSat {
  fmt.Printf("\nAttributes match policy")  // 属性匹配策略
 }
 canDecrypt := attributes.CouldDecrypt(ct)
 if canDecrypt == true {
  fmt.Printf("\nDecryption should work")  // 解密应该有效
 }

 pt, _ := SecretKey.Decrypt(ct)
 if !bytes.Equal(pt, []byte(msg)) {
  fmt.Printf("\nPlaintext not recovered")  // 纯文本未恢复
 } else {
  fmt.Printf("\nPlaintext recovered successfully: %s", pt)  // 纯文本已成功恢复
 }

}

总的来说,该策略使用基于配对的密码学。因此,我们有一个公钥 (pk)、一个私钥 (sk) 和 ciphertext (ct):

其中我们在策略中有 n 个标签(每个标签用 i 表示),alpha 是总体密钥。如果你想了解更多关于基于配对的密码学,请尝试 这里。对于符合策略的内容:

Policy: ((location: edinburgh) and (service: payment)) or (role: admin)
Attributes. Location: edinburgh, Service: payment, Role: sales
Public key (64 bytes): 040604000200151468347a05d99fea93226a6cb8e27a08d701fe1403d82bc2c91e5c0dfaf5e98d85dce43f1e337989b5a9d4dfcb39e0105b9aaa8b763825fec2
Private key (64 bytes): c400030002000f4c4f86d6b8bb1e19131e71898c6eed7fe0ceddd6fc40429cc7b2f534389f0d0000000000000000000000000000000000000000000000000000
Policy works
Decryption should work
Plaintext recovered successfully: My message

和“admin” [ 这里]:

Policy: ((location: edinburgh) and (service: payment)) or (role: admin)
Attributes. Location: glasgow, Service: payment, Role: admin
Public key (64 bytes): 0406040002001769642282666a2cc054b059b3785d38397e4871c216f3aaf292ca3e6fbf01b885c65038712a141f5dd5bf413efedceb0230b77e3ce1367fb8a9
Private key (64 bytes): c4000300020073ba919191d5aa357cd57670c9da805f810da99141c598a07bb1d44acdce06210000000000000000000000000000000000000000000000000000
Policy works
Decryption should work
Plaintext recovered successfully: My message

以及一个不匹配的策略 [ 这里]:

Policy: ((location: edinburgh) and (service: payment)) or (role: admin)
Attributes. Location: stirling, Service: payment, Role: production
Public key (64 bytes): 040604000200010eff9555a2c03f8b8488c8eb32db7daa853454d897a03218f82c168ae43ee65541b15cda9b845e35b5e25cef0aa144026dd869a63c56d2f216
Private key (64 bytes): c40003000200499b969f303bf8a18d0855056b296925d218392aae8f1492da26152edbe233b50000000000000000000000000000000000000000000000000000
Policy works
Attributes match policy
Plaintext not recovered

你可以在此处运行演示 [ 这里]:

CP-ABE(密码策略 - 基于属性的加密)与 Kryptology \ \ 存在一个旧的安全世界,以及一个新世界。我们的旧世界基于将用户映射到角色,然后...\ \ asecuritysite.com

如果你对 ABE 感兴趣,这里有该方法的发明者之一:

密码学领域的全球领导者:Brent Waters

Bill Buchanan OBE

参考文献

[1] Tomida, J., Kawahara, Y., & Nishimaki, R. (2021). Fast, compact, and expressive attribute-based encryption. Designs, Codes and Cryptography, 89, 2577–2626

  • 原文链接: medium.com/asecuritysite...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
asecuritysite
asecuritysite
江湖只有他的大名,没有他的介绍。