Zhuang's Diary

言之有物,持之以恒

在抗量子密码方向,目前The National Institute of Standards and Technology (NIST)已经进入到第三轮密码学评测/筛选

Open Quantum Safe

关于NIST评测的抗量子密码实验的算法都开源于此项目,Open Quantum Safe framework it may be easier to use liboqs ==> https://github.com/open-quantum-safe/liboqs。另外一个更加实用的抗量子密码算法集合 ==> https://github.com/PQClean/PQClean/。

他们之中,都有关于 Kyber 和 Dilithium 算法实现,可以直接使用。

Kyber-对称加密算法和非对称加密算法

该项目由实验室量子方向研究员提供,其开源版本如下:

​ Kyber 包含了对称加密算法和非对称加密算法,Kyber 算法的介绍内容 ==> https://pq-crystals.org/kyber/software.shtml。

​ 一句话概括其算法 ==> Kyber IND-CCA2-secure key encapsulation mechanism (KEM), whose security is based on the hardness of solving the learning-with-errors (LWE) problem over module lattices.

​ 使用方法:

  • 在所谓的混合模式下使用 Kyber 并结合已建立的“前量子”安全性; 例如结合椭圆曲线 Diffie-Hellman。
  • 建议使用 Kyber-768 参数集,根据保守的分析,该参数集可针对所有已知的经典攻击和量子攻击实现超过 128 位的安全性。

Dilithium-数字签名算法

​ 算法介绍 ==> https://www.pq-crystals.org/dilithium/。

​ 具体实现的论文 ==> https://www.pq-crystals.org/dilithium/resources.shtml,目前最新版本为 CRYSTALS-Dilithium – Algorithm Specifications and Supporting Documentation (Version 3.1)

生成式AI的创新之处

近期以ChatGPT为代表的“生成式AI”(Generative AI)技术得到了广泛关注。**和传统的对话机器人(Chatbot)不同,OpenAI的ChatGPT确实有独特的技术创新,在人工智能的发展史上会是一个里程碑,甚至有可能和2016年谷歌的AIphaGo相提并论。目前的趋势显示,ChatGPT的应用前景比AlphaGo更广泛,更有潜力在推动这股AI技术潮流的发展方面发挥重要作用。

首先来学习对话机器人的工作机理

首先用户需要通过文字或语音向对话机器人输入一段信息,紧接着机器人会识别并理解这段信息,判断由该信息开启的对话任务,并给出相应的回复内容。最早期的对话机器人更像一个基于数据库或者知识库的查询系统,根据用户输入的信息查询到对应的答复。可以说这些答案基于不同的索引(index),已经事先存入对话机器人的数据库或者知识库,就跟搜索引擎使用的算法很类似。当对话机器人收到用户输入的信息以后,主要工作是处理信息中的关键词来生成最匹配的索引,再基于一定规则找到最匹配的答复。后来发展的对话机器人也可以利用训练数据,通过机器学习来产生答复,比如2014年的深度学习模型Seq2Seq被成功地用到了对话机器人上面。这些机器学习模型最喜欢的训练数据就是事先采集和标注好的在相同场景下(比如智能客服)的对话记录。

1.早期最有影响力的生成式AI技术是2014年发明的生成式对抗网络(Generative Adversarial Networks)

其本质是一种深度学习模型,原理上有两个神经网络相互对立,一个生成器和一个判别器。生成器或生成网络负责生成类似于源数据的新数据或内容,判别器或判别网络负责评价源数据和生成数据之间的区别并向生成器提供反馈。生成式对抗网络被成功用于计算机视觉技术,比如图像的生成和合成,但是在对话机器人技术上的成功应用并不多。

2.ChatGPT的核心是2017年出现的新生成式AI技术Transformer和随后产生的基于Transformer的大规模预训练技术,并引入了一些新的强化学习算法

其中的核心技术Transformer是2017年谷歌发明的,它来源于2017年谷歌的一篇科研论文《Attention Is All Your Need》原本这篇论文聚焦的是自然语言处理领域,但由于其出色的解释性和计算性能,Transformer开始被广泛使用在AI各个领域和不同数据类型,成为最近几年最流行的AI算法模型。

3.Transformer的另一个巨大贡献是产生了预训练语言模型,比如GPT、BERT和ERNIE等

这些预训练语言模型用到的对语言的编码器和解码器,都是由一个个的Transformer组件拼接在一起形成的。比如,预训练语言模型BERT 所做的就是从大规模上亿的无标注文本语料中,随机抠掉一部分单词,形成类似完形填空的题型,不断学习空格处到底该填写什么。BERT的训练是从大量无标注数据中学习复杂的上下文联系。BERT和GPT(Generative Pre-Training)最主要的区别在于,BERT仅仅使用编码器部分进行模型训练,GPT仅仅使用解码器部分,所以GPT更适用于生成文本。

总的来说,预训练的第一步是在大规模无标注数据(如网上文本)上进行模型预训练,学习通用的语言模式;第二步在给定自然语言处理任务的小规模有标注数据上进行模型微调,快速提升模型完成这些任务的能力,最终形成可部署应用的模型**。**预训练模型已经在大规模语料上训练好了参数,用户在用的时候只需要在这个基础上训练更新参数。用户可以在神经网络加的最后的一层上进行分类或者更多的语言推理任务(比如对话等)。预训练技术成功激活了深度神经网络对大规模无标注数据的自监督学习能力,而Transformer和基于它的GPT、BERT、ERNIE等模型奠定了自然语言处理领域大模型的基础,证明了通过大规模语料的预训练技术,能够大幅度提升各类文本阅读理解的效果,开启了自然语言处理的新时代。

从Transformer提出到“大规模预训练模型”GPT和BERT的诞生,再到GPT-2的迭代,以及到GPT-3和ChatGPT的出现,标志着OpenAI成为营利性公司。ChatGPT可以说是OpenAI公司利用最新生成式AI技术(Transformer)和最新大规模预训练模型(GPT-3.5)在对话机器人上的成功应用。GPT-3的模型所采用的数据量多达上万亿,主要使用的是公共爬虫数据集和有着超过万亿单词的人类语言数据集,对应的模型参数量也达到1,750亿。另外,ChatGPT还采用了新的强化学习算法RLHF(Reinforcement Learning from Human Feedback,从人类反馈中强化学习)来对模型进行训练,具体是让一些外包人员不断从模型的输出结果中筛选,判断哪些句子是好的,哪些是低质量的,这样就可以训练得到一个强化学习中的奖励(reward)模型。

ChatGPT属于现象级应用,大家都可以有直观感受,未来这类应用的体验提升和更新速度只会更快,理解其背后的技术有助于我们把握这个趋势。从大量用户在网上分享的反馈来看,与同类对话机器人相比,ChatGPT具有几个明显的优点:

  • 更有“对话”的感觉:ChatGPT在语言组织的逻辑性和系统性方面有了显著提高,感觉像是一个助理,甚至是老师在回答问题。

  • 回答理性又全面:不像网上搜索问题那样,很可能碰到一些固执的回答者,只站在一个角度回答问题,ChatGPT能做到多角度全方位回答。

  • 可以理解上下文:例如,在提出一个问题之后,可以用“就刚才的回答中,你指的xx到底是什么意思?”等形式,进行追问。

  • 会根据用户的反馈,持续优化模型:ChatGPT答案的质量、完整性每天都有一定提高。这是新的强化学习算法和几十名外包人员每天筛选答案的贡献。

  • 可以协助创作内容,甚至对计算机代码进行指导:注意,ChatGPT并不是简单地从某个模版中选择内容,而是根据实时计算的结果提供答案。你给的信息越精准,回复就越有针对性。

ChatGPT还不能做什么

ChatGPT提供的答案只能被认为是不保证100%可靠的建议。因为ChatGPT是基于大规模预训练这样的无监督学习,我们无法分辨预训练信息的来源和真实性。ChatGPT给出答案的精确度取决于预训练样本规模(目前预训练样本只限2021年之前的数据)和样本本身的准确度。所以很明显,ChatGPT并没有连接一个稳妥可靠的知识库,这也说明目前这个版本无法完全替代搜索引擎,而更适用于一些务虚的任务,比如写小说、写诗歌、搞辩论。我们认为给ChatGPT连接一个高质量的知识库会极大提高ChatGPT的准确性。一个可以考虑的方向是,让ChatGPT能够持续更新知识、查询知识,从而带领搜索引擎和互联网的发展。目前看来,至少ChatGPT可以做到将搜索引擎上的信息润色、组织成最适合人阅读的形式,直接反馈给用户。

预见未来

直接应用生成式AI(Generative AI )的场景是人机互动的文本、图像、语音、视频,也可以生成软件代码、音乐、虚拟世界的三维模型等,在消费领域可以用来做艺术创作、游戏开发、人员陪护等,它为商业领域里也带来很多数字化创新的机会。

企业级解决方案的创新是用户界面的变化,采用自然语言进行交互。无论是交易型应用还是分析型应用,基于AI采用自然语言进行互动的方式早有所探索,例如企业级商业智能可以采用持续的自然语言问答进行数据查询,并自动生成自然语言回答或者直观的图表;利用生成式AI可以进一步提升用户界面生成效率和质量。

聊天机器人在很多业务场景下并不能完全替代人工,这种方式不仅存在AI准确性的问题,而且在用户体验上缺乏沟通的温度,然而,AI具有超越人脑的信息处理能力,可以提供辅助人员互动的智慧,支持人与人之间有温度的沟通。不仅具有前文所述的行动计划推荐能力,而且能够实时分析销售人员的行为和话术,提出有针对性的辅导、改进建议,提升销售成功率,生成式AI进一步提升了此类智能化辅助程度。

可以预见,企业数字化应用可能会有以下变化:

  1. 实现业务流程的全自动导航,例如,根据用户反馈,通过生成式AI自动改进产品设计,这将改变传统的产品开发相关企业软件(例如PLM、CAD)的应用流程。
  2. 2B软件架构简化,强调前端开发,进一步实现“数字技术民主化”,降低工作中对数据、信息和知识的访问门槛,用户能够更好地使用数字化技术和AI。传统企业软件架构是应用软件访问集中的数据库,需要用代码来连接用户请求和数据,而未来数据和算法都是服务,利用生成式AI产生代码的过程将极为简化,企业软件将完全聚焦于业务运营和用户体验的持续创新。
  3. 下一步,如果AI还具备了,推理,推演,演绎的能力,例如回答:明天我要去见哪个客户会更有助于达成我这个月的销售指标?用什么手段能降低5%的费用而不影响员工满意度?那么AI将会觉有更加深远的影响。

生成式AI还将改变企业软件行业的商业生态——AI算法和工程等技术平台的开源社区蓬勃发展,利用开源技术开发基础模型越来越普遍。然而,体现企业差异化能力的是喂给AI的原料,所以数据资源的价值将更为凸显,具有独特know-how和来源的数据将成为AI背后的能力。

Veramo 中的功能是通过插件系统添加到代理中的。

Plugins Architecture

DID Methods

DIDs and DID documents are recorded on a Verifiable Data Registry; DIDs resolve   to DID documents; DIDs refer to DID subjects; a DID controller controls a DID document; DID URLs contains a DID; DID URLs dereferenced to DID document fragments or external resources; DID resolver implements resolve function; DID URL dereferencer implements dereferencing function; DID method operates a   Verfiable Data Registry; DID resolver and DID URL dereferencer instruct a DID method.

Core Supported DID Methods

Veramo 核心插件支持以下 did 方法。

did:ethr

did:ethr:0xc530503a148babcaca68565cfa576d6f43427a2d

Ethr-DID 为以太坊地址提供了一种可扩展的身份识别方法,使任何以太坊地址都能够收集链上和链下数据。因为 Ethr-DID 允许任何以太坊密钥对成为身份,所以它比基于智能合约的身份方法更具可扩展性和隐私保护性。

这种特殊的 DID 方法依赖于 ethr-did-registry。 ethr-did-registry 是一个智能合约,可以促进链下(和链上)身份验证的公钥解析。 它还有助于密钥轮换、委托分配和撤销以允许第 3 方签名者,以及设置和撤销链下属性数据。 这些交互和事件被聚合使用以使用 ethr-did-resolver 构建 DID 文档。

did:web

did:web:veramo-agent.herokuapp.com

Web-DID 利用域名系统,允许 Web 来源的所有者将其转换为 DID。创建 Web-DID 就像创建 DID 文档并将其托管在众所周知的 URL 下一样简单。 每次解析 DID 时,DID 文档都必须通过 HTTPS GET 可用。 这意味着创建一个 DID,不需要区块链,但它有一定的权衡。 Web-DID 的安全性通过实施 TLS 植根于现有的互联网 PKI。 Web-DID 可以直接托管在网络域的众所周知的 URL 下,例如 www.example.com/.well-known/did.json,也可以托管在特定的子路径下。使用子路径允许在一个网络域下托管多个 DID。此方法还可用于允许 Web 应用程序为其用户创建 Web-DID,例如 www.example.com/users/username/.well-known/did.json。

虽然 Web-DID 是一种非常有用的技术,可以将 Web2 连接到 Web3,并且特别允许公司非常轻松地创建他们的 DID,但它在安全和隐私方面存在一些缺点(例如,跟踪)。

did:key

did: key:z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH

Key-DID 代表了一种非常轻量级的自我证明 DID 方法,它不需要任何外部实用程序,例如区块链。Key-DID 是通过生成加密密钥对(例如,Curve25519)创建的。使用 Curve25519 将自动向 DID 文档添加两个条目,可用于 EdDSA(即 Ed25519)和 ECDH/加密(即,使用 X25519)。Key-DID 始终解析为相同的 DID 文档,并且由于它是不可变的,所以添加服务端点和其他密钥是不可能的。

Message Handlers

创建代理实例时,您指定要使用的消息处理程序以及调用它们的顺序。例如,如果您的应用程序从 QR 码捕获可验证凭证,其中数据被编码为 JWT,您将在代理设置中按顺序指定 urldid-commdid-jwtcredential-w3c 处理程序。

url

UrlMessageHandler 解析来自 URL 的消息,通常来自查询字符串。进一步的解析可能在 JWT 和/或 DIDComm 处理程序中执行。该处理程序支持获取缩短的 URL 重定向。

did-comm

DIDCommMessageHandler 使用收件人的私钥解密传入的消息。 解密的消息将传递给后续的消息处理程序。

did-jwt

JWT MessageHandler 解码 JWT 并创建消息对象。

credential-w3c

W3CMessageHandler 检查可验证凭证和可验证演示的消息有效负载,并相应地格式化消息对象。

Verifiable Credential

可验证数据只是使用加密算法进行数字签名的数据。Verifiable Credential 可验证凭证,可以代表物理凭证所代表的所有相同信息。

它具有发行者主题证明可验证数据等属性。

目前W3C的示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
"@context": [
"https://www.w3.org/2018/credentials/v1",
"https://www.w3.org/2018/credentials/examples/v1"
],
"id": "http://example.edu/credentials/1872",
"type": ["VerifiableCredential", "AlumniCredential"],
"issuer": "https://example.edu/issuers/565049",
"issuanceDate": "2010-01-01T19:23:24Z",
"credentialSubject": {
"id": "did:example:ebfeb1f712ebc6f1c276e12ec21",
"alumniOf": {
"id": "did:example:c276e12ec21ebfeb1f712ebc6f1",
"name": [{
"value": "Example University",
"lang": "en"
}, {
"value": "Exemple d'Université",
"lang": "fr"
}]
}
},

"proof": {
"type": "RsaSignature2018",
"created": "2017-06-18T21:19:10Z",
"proofPurpose": "assertionMethod",
"verificationMethod": "https://example.edu/issuers/565049#key-1",
"jws": "eyJhbGciOiJSUzI1NiIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..TCYt5X
sITJX1CxPCT8yAV-TVkIEq_PbChOMqsLfRoPsnsgw5WEuts01mq-pQy7UJiN5mgRxD-WUc
X16dUEMGlv50aqzpqh4Qktb3rk-BuQy72IFLOqV0G_zS245-kronKb78cPN25DGlcTwLtj
PAYuNzVBAh4vGHSrQyHUdBBPM"
}
}

Decentralized Identifier

DID 的风格或更准确地说是 DID 方法定义了如何执行该 DID 方法的 DID 的 CRUD 操作。 每个 DID 方法在特定用例中都有不同的权衡。 例如,可以在没有区块链的情况下创建 Web DID,但存在依赖于区块链的 DID 方法。 它们都是有效的 DID,但有不同的保证。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// https://veramo.dev/.well-known/did.json
{
"@context": "https://w3id.org/did/v1",
"id": "did:web:veramo.dev",
"publicKey": [
{
"id": "did:web:veramo.dev#0405aa19bb98a5fd29c15a730cb5064ca128dea19247b896b1a7bdad0b4bccccda9b47366cd1359e740d938e5a47d7bed0501150e8a1623805ac47c489421b1506",
"type": "Secp256k1VerificationKey2018",
"controller": "did:web:veramo.dev",
"publicKeyHex": "0405aa19bb98a5fd29c15a730cb5064ca128dea19247b896b1a7bdad0b4bccccda9b47366cd1359e740d938e5a47d7bed0501150e8a1623805ac47c489421b1506"
}
],
"authentication": [
{
"type": "Secp256k1SignatureAuthentication2018",
"publicKey": "did:web:veramo.dev#0405aa19bb98a5fd29c15a730cb5064ca128dea19247b896b1a7bdad0b4bccccda9b47366cd1359e740d938e5a47d7bed0501150e8a1623805ac47c489421b1506"
}
],
"service": [
{
"id": "did:web:veramo.dev#msg",
"type": "Messaging",
"serviceEndpoint": "https://veramo.dev/messaging",
"description": "Handles incoming POST messages"
}
]
}