可编程密码学(Part 1)

1. 引言

当前密码学正处于一次代际转变之中,从special-purpose cryptography专用密码学过渡到programmable cryptography可编程密码学

  • 1)所谓“专用密码学”,指的是那些只能执行单个操作且具有密码学安全保证的协议。
    • 公钥加密和签名方案就是专用密码学的典型例子:如,一个签名方案允许我向你证明我知道一个特定的加密密钥。
    • 更复杂的专用密码学例子包括:
      • 群签名(见2001年论文Group Signatures),这是一种特殊的签名方案,允许某人以匿名的方式代表一个群体进行签名;
      • range proofs区间证明(见比特币网络的Confidential Transactions - Investigation),允许在不泄露秘密数字本身的情况下,证明该数字位于某个区间内。
    • 在这些专用密码学案例中,密码学家们为了实现某个特定的操作,设计了专用协议,有时甚至需要发明新的数学工具。
    • 在过去 50 年中,专用密码学已成为全球通信体系中不可或缺的一部分 —— 如,今天几乎所有在 Web 上传输的数据都经过某种形式的加密协议(见HTTPS encryption on the web)。
  • 2)“可编程密码学”是用来描述第二代密码学原语的术语,且这些原语正逐渐变得实用。编程密码学的核心特征在于相比第一代密码学具有更强的灵活性:编程密码学允许在密码协议内部或之上执行通用计算。以下是一些例子:
    • 2.1)全同态加密(Fully Homomorphic Encryption, FHE)允许在他人的私密数据上执行任意程序,同时对数据本身和计算结果一无所知。
    • 2.2)多方安全计算(Multi-Party Computation, MPC)允许在多个人的私密数据上执行任意程序,同时除了计算结果外,对数据一无所知。
    • 2.3)zkSNARKs 允许我证明一段任意代码在某些只有我知道的秘密输入下被正确执行,且无需透露任何关于这些输入的信息。
      • 使用“专用”零知识证明,可以声称:“我有一个秘密 S S S,使得 M O D E X P ( S ) = 0 x a 91 a f 3 a c . . . \mathrm{MODEXP}(S) = 0xa91af3ac... MODEXP(S)=0xa91af3ac...”(其中 M O D E X P \mathrm{MODEXP} MODEXP 是模幂运算函数),并且我可以向你证明这一点,而不泄露 S S S
      • 使用“通用” zkSNARKs,不仅限于函数 M O D E X P \mathrm{MODEXP} MODEXP所想要验证的任何函数,都可以做到
    • 2.4)见证加密(Witness Encryption)允许使用程序来加密消息,而非传统的私钥。如,可以设置一个数学研究奖金,将一个比特币钱包加密,条件是:“只有当你能提供黎曼猜想的证明时,这个钱包(内含 1000 BTC)才可解密。
    • 2.5)程序混淆(Obfuscation)允许“加密”一个程序,即对程序进行混淆,使他人可以对其输入任意数据并得到正确输出,但无法学到关于程序内部状态或结构的任何信息。【关于程序混淆(Obfuscation)的理论极限,有一些技术细节。说“可以隐藏任何东西”并不完全准确。详情可参看 Can We Obfuscate Programs?(CRYPTO 2001论文 On the (Im)possibility of Obfuscating Programs)。】

在这里插入图片描述
上图为一张简化版的“技术树”,展示了部分密码学原语。

  • 加粗部分是可编程密码学。
  • 箭头表示“归约”关系 —— 换句话说,技术树上层的原语更加先进,能够泛化它们下方指向的节点。灵感源自 Complexity Zoo。

过去五年左右,可编程密码学的首批实例开始在现实世界中的开发者手中变得可用—— 不同的可编程密码学原语处于不同的发展阶段

  • zkSNARK、MPC 和 FHE 已经进入(或接近)生产可用阶段;
  • 见证加密(Witness Encryption)程序混淆(Obfuscation)仍然属于高度理论阶段,目前的构造效率极低,不具备实际应用价值。。

在接下来的十年里,可编程密码学的性能、易用性和功能将发生巨大飞跃。

专用硬件可编程通用硬件的转变,是计算史上的一次重要飞跃 —— 就像从闹钟进化到 CPU。随着密码学领域的这些新进展,当前正处在信息层面的类似转型的边缘,而不再仅仅是物理硬件的变革。

从专用密码学到可编程密码学的转变,会带来怎样的可能性?人们又将如何实现这一转变?

2. 可编程密码学用途?

如今人们谈论密码学时,通常会联想到诸如隐私安全性完整性这样的词汇。专用密码学历来是一种保护现有系统免受恶意攻击的工具。

相比之下,由于具备高度灵活性,通用密码学能够构建具有前所未有强大新属性的计算系统。这些属性在以前根本无法实现。以下是三个例子:

  • 1)通用协议(The Universal Protocol)
  • 2)幻觉服务器(Hallucinated Servers)
  • 3)加密自动机(Cryptomata)

2.1 通用协议(The Universal Protocol)

想象一下,有一个统一的通用协议来管理你的社交数据数字身份金融交互职业履历医疗数据,以及与你相关的一切数字信息。这个通用协议定义了一种统一的数据格式,以及一套用于验证任何数据的正确性和来源的程序。更重要的是,这个通用协议极其灵活 —— 事实上,它具备图灵完备性。任何在通用协议数据上运行的可计算函数,其输出也将符合该协议,并且保持密码学级别的完整性。

互联网上的每一个网站都将以与通用协议兼容的方式处理和输出数据。此外,任何网站或机器都能够验证、理解和消费符合该协议的数据。【通用协议(Universal Protocol)这个概念,与语义网(Semantic Web)等项目有相似之处(并且部分受其启发)。更广义来说,可编程密码学解锁了许多互联网早期愿景中的架构模型。】

可以将不同来源的通用协议数据包组合在一起,使用任何可计算函数对它们进行变换,可以部分混淆它们,交给其他人用他们的数据进一步组合,或者任意操作它们 —— 最终得到的输出仍然可以被其他了解通用协议的人验证和解释

这听起来像是空想,但借助可编程密码学,这在理论上已经触手可及 —— 甚至不需要现有公司和服务提供商更换标准。在过去两年里,已经利用可编程密码学开发出了“通用加密适配器(Universal Cryptographic Adapters)”——或许更准确的说法是将这个工具描述为 “通用加密适配器(Universal Cryptographic Adapter)” 或 “元协议(Meta-Protocol)” ,而不是“通用协议”。
在实际操作中,可能会出现许多不同的协议和子协议 —— 比如,各国政府可能会采用不同方式签发数字身份凭证。核心思想是:

  • 通过可编程密码学作为适配器,现在可以实现这些协议之间的组合与转换。
    * 如:可以利用适配器将美国国税局(IRS)签名的数据银行签名的数据,以及以太坊区块链上的状态证明,组合成一个单独的金融凭证,这个凭证可以被任意第三方按照他们需要的格式验证和解读。

在这里插入图片描述
上图源自相关 XKCD 漫画。

所开发的通用加密适配器将进一步使任何数据能够与通用协议格式相互转换。正如之前提到的,目前世界上大部分网络流量已经通过类似 HTTPS 或 DKIM 这样的专用密码协议传输。所以,任何互联网用户都可以将自己的 HTTPS 流量通过通用适配器代理,转换成任意目标平台或数据消费者都能理解的格式
在这里插入图片描述

通用加密适配器(基于 zkSNARKs 等技术)允许将来自任何源协议/格式的数据,转换为任意目标格式的数据,并保证其完整性。

目前已有多个非常有前景的项目正在朝这个方向迈进,比如 TLSNotary 和 Proof Carrying Data 框架,这些项目距离生产环境已经不远。这些项目大多建立在 zkSNARKs 之上,不过要实现更广泛、更通用的数据转换,还需要更高级的技术工具,如 递归 ZK 协议 和 多方安全计算(MPC)

当然,要实现大规模通用协议的完整愿景,仍然需要大量的工程和基础设施建设。不过,类似的技术变革历史上也曾发生过——HTTPS;如果这种模式能够被广泛认识和接受,人们完全可以设想一种 HTTPS 的后继协议(ZTTPS?) 被广泛采用,它将针对这种通用组合性进行优化,使之更简单、更易用。

通用协议的示例应用有:

  • 跨平台迁移社交数据 —— 可以无缝转移点赞、好友、关注者、历史记录和声誉,在 Facebook、Twitter、Reddit、Instagram 等平台之间自由切换
  • 金融中介机构(如 Equifax、Transunion 或 Experian)被每个消费者设备上的加密协议取代;智能手机可以根据查询,生成关于财务历史或健康状况的加密安全响应,同时保证底层数据依然私密并由用户自行控制
  • 出现一种通用且可互操作的数字身份标准网络被所有网站、企业、政府机构、大学等接受。这些标准是**无许可(permissionless)**的 —— 它们依赖于密码学,而不依赖于向某个特定机构注册或查询认证

2.2 幻觉服务器(Hallucinated Servers)

假设你和几个朋友、同事或同学想为你们的社区建立一个社交网站。这个社区希望使用这个网站来托管公共和私人讨论发布生活动态管理不同兴趣小组的成员资格维护社区声誉系统,等等。

按照今天的做法,大致会是这样的流程:

  • 需要找到像 Amazon Web Services 这样的服务提供商,租用一台云服务器
  • 接着需要编写后端逻辑代码,并将代码部署到服务器上。
  • 最后,所有人通过与服务器通信来使用这个应用。
    • 你(以及 Amazon)会拥有对云服务器的特殊访问权限,但你会承诺不会“过多窥探”服务器的状态,也可能会设置一些限制,不鼓励用户上传过于敏感的数据
    • 如果你想构建一个涉及更隐私或敏感数据的应用,特别是面向社交圈外的陌生人,你还需要建立大量的历史、声誉和信任

然而在未来十年或二十年内,Web 应用的部署方式可能会发生巨大变化许多应用后端可能会运行在用户运行时“幻觉”出来的虚拟机内,并由密码学保障其正确性

这些数字服务不会有实体形态 —— 不会有一台特定的物理机器保存应用状态或执行代码。取而代之,每个应用用户会保存自己的私有状态,同时持有全局应用状态的一个加密“密码碎片”整个用户群体将通过要求每个参与者在自己的碎片上执行经过密码混淆的程序版本共同模拟“幻觉服务器”的程序执行
可编程密码学原语

  • 可以确保用户能够读取、写入和修改该幻觉服务器上的状态
  • 只能根据预先商定的、编码在服务器逻辑中的规则操作;
  • 用户无法读取其他人的私有状态,也无法读取服务器持有的“全局私密状态”

可以构建无需直接接触数据即可在用户数据上运行的服务;实际上,甚至可以构建虚拟应用,维护和计算一种无人知晓的状态

这种结构显然会对隐私、安全性以及用户对数据的控制权产生深远影响。但其意义远不止于隐私和安全。当今人们的数字交互受限于少数几家中心化服务提供商设计的、可行的商业模式和护城河中的狭窄、预定义操作集。在未来,可以根据自己的需求,与其他有兴趣的用户“共同幻觉”出所需的应用后端,进行点对点或多方交互

这些幻觉服务器网络可能会构成互联网的新一代密码学支撑结构;在这样的支撑结构之上,能够快速孵化新的数字服务 —— 这些服务在今天需要单一服务提供商积累多年品牌资本、用户锁定、商业模式验证以及信任积累才能实现。

在这里插入图片描述
上图为:“受信第三方”(Trusted Third Party)模型。引自 Nick Szabo 1997 年的文章,《上帝协议》(The God Protocols)。**
在这里插入图片描述
上图为:与之对比的是同一篇文章中的“数学上值得信任的协议”(Mathematically Trustworthy Protocol)模型。**

这个概念比“通用协议/通用适配器”的想法要更进一步一些,但也仅仅相差几年而已。基于通用多方计算(MPC)技术全同态加密(FHE) 的计算网络的早期原型——如https://github.com/phantomzone-org/phantom-zone(Rust) 开发已经在进行中多方全同态加密(multi-party FHE) 是构建这些网络的有希望的基础技术候选;进一步来说,像程序混淆(program obfuscation)这样的技术可能会降低这些网络的通信复杂度和活性需求(liveness requirements)

幻觉服务器的示例应用有:

  • 个性化加密代理始终在为你搜索,无需你的数据离开本地设备,为你推荐产品、电影、工作,甚至是约会对象
  • 即时为你所在的社区搭建一个新的“虚拟社交平台”,可以自动接入你在其他社交平台上的所有数据不需要你亲自运行服务器,也无需依赖任何中心化中介
  • 自动接收有关疾病或健康风险的通知无需向任何人共享你的医疗数据

2.3 加密自动机(Cryptomata)

可编程密码学中最强大的分支 —— 如 程序混淆、量子密码学——2020年论文One-shot Signatures and Applications to Hybrid Quantum/Classical Authentication中的高级原语,以及未来区块链技术的后代 —— 可能能构建“加密自动机”(cryptomata)。

加密自动机(Cryptomata,缩写自 cryptographic automata)是:

  • 自治的、自执行的程序,
  • 具备完美的正确性和隐私保障
  • 没有人能够阻止或篡改加密自动机的执行
  • 同时,也没有人能够“撬开”加密自动机,读取其内部状态或内存
  • 这些保障不仅仅由软件强制执行,甚至也不依赖于硬件——它们由数学本身强制执行。

加密自动机永远不会宕机执行过程具备可加密验证的正确性从不泄露数据,并且暴露出无许可(permissionless)的 API,任何人都可以调用

这种技术的极限形态具备非凡的力量,同时也至少带有一丝令人不安的气息。如:

  • 将通用人工智能(AGI)运行在加密自动机内部,会带来一个真正自我主权的“头脑”,它在内部进行完全私密的思考,与外界完全隔绝,且无法被关闭 —— 实质上,它就是一个由纯信息构成的独立智能体
  • 在加密自动机内部运行一个详细的物理模拟,将拥有一个自主数字现实 —— 一个独立于我们现实世界存在的数字世界,甚至其中可能存在与我们物理世界一样真实的数字生命体。【自主运行的数字现实(Autonomous Digital Realities)这个概念,正在“自主世界(Autonomous Worlds)”社区被开发者和创作者们积极探索。目前,很多人正在构建链上游戏,作为自主世界的早期探索。详情可参看0xPARC团队2022年8月3日博客 Autonomous Worlds (Part 1)。】

更现实一些地说,在未来几十年内,人类社会关键的数字公共基础设施可能将会运行在一个加密自动机网络中

  • 包括身份注册系统、凭证系统、生物特征或基因数据仓库、银行、市场、虚拟世界等。

如:

  • 我可以将自己的学历证明和经过验证的职业履历上传到一个求职用的加密自动机中,该自动机会安全地存储这些信息,然后在有雇主上传匹配职位时通知我
  • 另一个加密自动机则可能安全地存储一个由自愿者分享的巨大基因数据仓库,并持续运行各种隐私保护但有效的统计相关性分析或模式挖掘算法,供研究人员使用。

在这里插入图片描述
如上图所示:

  • 一个由加密自动机构成的网络,支撑着文明的核心数字基础设施。
  • 每个加密自动机都是完全安全、自主执行、对内部内容隐私保护,并且与其他所有加密自动机高度互操作的。
  • 这些系统的具体设计,将在未来决定它们是会成为人类文明的噩梦还是带来前所未有的价值

当前;

  • 对于熟悉区块链技术的人来说,可以将加密自动机理解为一个运行在智能合约中的混淆程序 —— 本质上是一个拥有 “私有状态” 的智能合约。
  • 在区块链之外,加密自动机则可以通过程序混淆、zkSNARK、多方计算(MPC),甚至未来的量子密码学等技术的组合实现。

然而,目前仍存在许多悬而未决的研究难题甚至连一个理论上令人满意的加密自动机构造都尚未完全达成 —— 比如,当前最大的理论限制之一是:

  • 基于现有技术构建的加密自动机无法防止自身被无限复制和分叉,这意味着某些类型的信息隐藏无法实现

加密自动机的示例应用有:

  • 运行人类文明核心数字基础设施的数字服务 —— 如身份注册系统、凭证系统、敏感生物数据仓库、市场等 —— 这些服务从构建之初就是完全自主、安全且高度互操作的
  • 由代码构成的自执行、自主主权智能体具备持有和保护自身秘密的能力
  • 具有“持续性存在”的模拟数字宇宙 —— 即使无人观察,它们仍会持续运行,并具备由数学与密码学保障的“物理规律正确性”

3. 为什么要把这些技术归在一起?

想象一下,如果回到 50 年前,单独去审视现代计算硬件栈中的各个组件,而不是把它们视为一个整体的“计算系统”

  • 非易失性存储器(Non-Volatile Memory,NVM)
    如果只从孤立角度看,最“显而易见”的应用是便携式存储 —— 软盘、U 盘。
    如果从狭隘的应用视角看 NVM,大家可能会专注于“如何做出更小更便携的 U 盘”。
  • 光纤通信(Fiber-optic cables)
    光纤的直接用途看似是让电话线和电视带宽更大 —— 能让更多人接收到更多电视节目。
  • 液晶显示屏(LCD)
    单独来看,LCD 技术可以实现“更薄的显示器”,让显示设备从厚重的 CRT 显示器转向平板屏幕。

单独来看,这些技术确实各自有用,但用途有限。
然而,一旦将它们放入更宏观的“计算机发展”语境中,它们的作用就完全不同了

  • 非易失性存储器可以构建硬盘 —— 关机后依然保留数据的存储设备,这成为个人计算机的基础特性。
  • 光纤通信支撑着现代互联网 —— 如今超过 90% 的互联网流量都通过海底光缆传输。
  • 液晶显示屏成为个人电脑显示器的基础技术,进而诞生了现代显示器、图形界面(GUI),几乎所有现代计算交互界面都依赖于它。

有了历史回顾视角,可以清楚地看到:真正有趣的事情,发生在这些技术作为“整体计算体系的组成部分”时。
这些技术产生巨大影响的根本原因,是它们成为了更大系统中的基础部件,这也是为什么孤立地审视这些技术是片面的

同样的道理,也适用于加密计算(Cryptographic Computing)
如果只在孤立语境下去问“zkSNARKs 能做什么?”“同态加密(FHE)能做什么?”,而不把它们放进“可编程密码学(Programmable Cryptography)”这一更广阔的背景下去思考
这就好比问:“LCD 显示屏能做什么?”而不去联想到更广泛的计算机或互联网的发展

如下图所示为一个集成式加密计算系统(作者Justin Glibert):
在这里插入图片描述

在过去几年里,人们已经开始尝试基于可编程密码学技术开发应用。
然而,大部分应用通常只使用了“可编程密码学”中的某一个分支。比如,目前有产品和公司围绕以下方向展开:

  • zkSNARKs 被用来让区块链变得更快(通过类似 rollups 和 validiums 的系统)。
  • 全同态加密(FHE) 让 AI 公司可以在加密数据之上训练和推理模型,实现数据隐私保护。
  • 多方计算(MPC) 让市场中的竞标者(如,Danish Sugar Beet Auction 丹麦甜菜拍卖 中的农民)能够对卖方隐藏自己的出价,或者让医院之间安全地共享敏感数据以用于研究。

这些应用无疑非常重要。但它们在很多方面也显得比较局限:在许多案例中,这些加密技术“仅仅”是被用来为现有服务增加某些增强功能

  • zkSNARK 被用来加速区块链,
  • FHE、MPC 和 ORAM 则被用来为已有的数字系统增加隐私或额外安全性

这是从单一加密原语(primitive)出发反推应用的自然结果。

相较之下,上一部分描述的三个概念通用协议幻觉服务器加密自动机)则指向一个计算与通信范式都发生根本性变化的未来
尤其值得注意的是:

  • 这些系统中的每一个都需要多种(甚至全部)可编程密码学原语协同工作,才能真正实现。

如:

  • 要实现幻觉服务器(Hallucinated Servers)的愿景,需要可验证的加密计算 —— 也就是FHE 和 MPC 之上的 SNARK
    • 参与加密协商的输入会来自通用协议(Universal Protocol),它依赖于零知识证明(ZKPs)

为了让这些操作具备良好的状态性与高性能,还可能需要引入 ORAM 或类似技术(如ObliVM: A Programming Framework for Secure Computation论文)。

以上例子清楚说明了:

  • 不同的可编程密码学原语提供不同能力
    • SNARKs 可以执行可验证正确的计算
    • FHE 和 MPC 可以在保密数据之上进行计算
    • 程序混淆(Obfuscation)和其他更先进的可编程加密原语,能够降低网络对实时性的要求

必须深入理解这些原语的功能,以及它们如何彼此组合,才能理解究竟可以构建哪些系统。

前面提到的那些“未来系统”,只是可编程密码学潜力的冰山一角

需要有体系的努力来深入理解各种可编程密码学工具协同带来的综合影响,因为最具颠覆性的应用,一定会需要多种(甚至全部)原语的深度集成。

技术人员、工程师和研究人员都将从将这些不同“分支”的密码学技术视为统一“全栈故事”的组成部分中获益良多。

4. 总结

自现代密码学发明以来,已经过去近 50 年。
过去这段时间里,从一个数字世界中没有任何加密数据的时代,走到了一个几乎所有互联网数据都经过加密的时代:

  • 所有主流网站都采用 HTTPS 加密;
  • 几乎所有电子邮件都经过 DKIM 签名(2024 年 2 月起,谷歌已强制要求);
  • 越来越多的消息和云端数据实现了端到端加密(苹果相关说明);
  • 超过 两万亿美元 的经济价值被锁定在加密货币中;
  • 长期困扰计算机科学界的 密钥分发问题 也终于正在大规模得到解决。

第一代密码学技术,为人们构建了一个安全的通信系统,支撑起全球规模的信息检索、消息传递、电子商务等。

接下来的 50 年,可编程密码学可能会帮助完成从“加密数据”到“加密计算”的跨越

  • 人类最重要的数字程序 —— 而不仅仅是传输的数据 —— 也会默认采用密码学保护。

这样的转变,将能够构建一个更加丰富、有结构、更加民主的数字世界
这个升级版的数字媒介,将带来诸多益处:

  • 让用户对自己的数据拥有更强隐私与掌控权
  • 所有数字服务之间实现深度互操作与无缝通信
  • 让人们有能力创造全新的数字宇宙。【Josh Stark 对 密码学(和区块链) 的价值提出了一个有趣视角,他称这种性质为 “硬度(Hardness)”。可参看其2022年4月13日博客Atoms, Institutions, Blockchains 和 2023年演讲视频 Atoms, Institutions, Blockchains ✧ Josh Stark ✧ Pre-Assembly 2023 来进一步了解该概念。】

在后续的文章中,将探讨可编程密码学的“技术树”、它可能的进展方向,以及它与区块链等其他技术之间的关系。

参考资料

[1] 0xPARC团队2024年7月30日博客 Programmable Cryptography (Part 1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/84611.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/84611.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux运维新人自用笔记(Ubuntu磁盘命名规则、新磁盘分区、主流文件系统类型、mkfs命令格式化文件系统、临时和永久挂载、挂载报错、dd指令)

内容全为个人理解和自查资料梳理,欢迎各位大神指点! 每天学习较为零散。 day21 一、磁盘维护流程 新硬盘(虚拟机可添加) 新硬盘需要做lvm管理 数据库迁移(夜间网站停机维护): 停止数据库监…

腾讯云轻量级服务器Ubuntu系统与可视化界面

以云服务器的方式搭建Linux workstation对比在电脑本地安装虚拟机的优势在于,不需要占用本地电脑资源空间,网络环境等相对稳定,可以用手机等轻量移动设备连接管理等。本文主要介绍使用腾讯云服务器,搭建Ubuntu Linux系统以及可视化…

如何在MacOS系统和Windows系统安装节点小宝远程工具

如何在MacOS系统和Windows系统安装节点小宝远程工具 摘要 本文讲述如何在MacOS系统和Windows系统安装节点小宝远程工具,并详细介绍了配置和使用远程控制的步骤。无论是在个人电脑还是手机、平板设备之间的远程连接,您都可以通过本教程轻松实现。 文章…

60天python训练营打卡day38

学习目标: 60天python训练营打卡 学习内容: DAY 38 Dataset和Dataloader类 知识点回顾: 1.Dataset类的__getitem__和__len__方法(本质是python的特殊方法) 2.Dataloader类 3.minist手写数据集的了解 作业&#xff1a…

Python 邻接表详细实现指南

邻接表是图数据结构的一种高效表示方法,特别适合表示稀疏图。下面我将用 Python 详细讲解邻接表的多种实现方式、操作方法和实际应用。 一、邻接表基础概念 邻接表的核心思想是为图中的每个顶点维护一个列表,存储与该顶点直接相连的所有邻接顶点。 邻…

Nginx反向代理解决跨域问题详解

Nginx反向代理解决跨域问题详解 核心原理 Nginx反向代理解决跨域的核心思路是让客户端请求同域名下的接口,由Nginx将请求转发到目标服务器,从而规避浏览器的同源策略限制。 客户端(同源:www.domain.com)↓Nginx&…

单片机测ntc热敏电阻的几种方法

在单片机中测量NTC(负温度系数)热敏电阻的阻值,通常需要将其转换为电压或频率信号,再通过单片机进行采集和处理。以下是几种常见的方法及其详细说明: 1. 分压法(最常用)​​ ​​原理​​&…

一套基于粒子群优化(PSO)算法的天线波束扫描MATLAB实现方案

以下是一套基于粒子群优化(PSO)算法的天线波束扫描MATLAB实现方案,包含完整代码、数学原理和详细注释。该方案针对均匀线性阵列(ULA)的波束方向图优化,通过调整阵元相位实现主瓣指向目标方向并抑制旁瓣。 %% 天线波束扫描的PSO算法实现 % 作者:DeepSeek % 创建日期:20…

增量学习ASAP的源码剖析:如何实现人形的运动追踪和全身控制(核心涉及HumanoidVerse中的agents模块)

前言 过去一周,我司「七月在线」长沙分部的具身团队在机械臂和人形上并行发力 关于机械臂 一方面,在IL和VLA的路线下,先后采集了抓杯子、桌面收纳、插入耳机孔的数据,然后云端训-本地5090推理 二方面,在RL的路线下&a…

计算机网络学习笔记:应用层概述、动态主机配置协议DHCP

文章目录 一、应用层概述1.1、C/S架构1.2、P2P架构 二、动态主机配置协议DHCP2.1、DHCP发现报文2.2、DHCP提供报文2.3、DHCP请求报文2.4、DHCP确认报文2.5、DHCP的续约与终止 总结 一、应用层概述 应用层位于计算机网络结构的最上层,用于解决应用进程的交互以实现特…

为服务器SSH登录增加2FA验证

安装NTP模块并设置时区 安装NTP模块 一般的服务器NTP服务默认是不安装的,需要安装NTP模块【7】并启用。 运行以下指令检查你的NTP模块是否已启用,已启用则忽略安装NTP模块的内容 timedatectl 如果你的返回内容和以下图片一样,则表示NTP未…

AI大模型提示词工程研究报告:长度与效果的辩证分析

一、核心问题:提示词长度与模型性能的平衡 核心矛盾:提示词长度增加 → 信息丰富度↑ & 准确性↑ ↔ 计算成本↑ & 响应延迟↑ 二、详细机制分析 (一)长提示词的优势(实证数据支持) 案例类型短提…

HttpServletResponse源码解析

Java Servlet API 中 HttpServletResponse 接口的源码,这是 Java Web 开发中非常核心的一个接口,用于向客户端(通常是浏览器)发送 HTTP 响应。 public interface HttpServletResponse extends ServletResponse {int SC_CONTINUE …

AI基础概念

目录 1、ASR和STT区别 2、流式输出 定义 原理 应用场景 优点 缺点 3、Ollama 4、mindspore和deepseek r1 v3 5、DeepSeek R1/V3 用的哪个底层AI框架 6、HAI-LLM比tensorflow、pytorch还强么 1. 核心优势对比 2. 性能表现 3. 适用场景 总结 7、openai用的什么底层…

ubuntu20.04速腾聚创airy驱动调试

1.下载相关资料 下载包括:速腾airy产品手册.pdf、RSView(用于显示激光雷达数据)、3d数模文件、 RS-LiDAR-16用户手册 以下链接进行下载 https://www.robosense.cn/resources 2.连接线路后通过Wireshark抓包后进行本地IP配置 2.1按照线路连…

Redis的大key和热key如何解决

文章目录 Redis大Key一、什么是Redis大Key二、大Key的产生原因三、大Key的影响四、大Key的解决方案1. 检测大Key2. 解决方案(1) 数据拆分(2) 使用压缩算法(3) 使用合适的数据结构(4) 设置合理的过期时间(5) 合理清理(6) 配置优化 五、预防措施总结 Redis热key一、热Key问题的本…

恒温晶振与温补晶振的区别

在电子设备领域,晶振如同精准的“心脏起搏器”,为电路提供稳定的时钟信号。恒温晶振(OCXO)和温补晶振(TCXO)作为两类重要的晶体振荡器,在不同的应用场景中发挥着关键作用,它们的区别…

基于SpringBoot的在线考试智能监控系统设计与实现

目录 一.🦁前言二.🦁开源代码与组件使用情况说明三.🦁核心功能1. ✅算法设计2. ✅Java开发语言3. ✅Vue.js框架4. ✅部署项目 四.🦁演示效果1. 管理员模块1.1 用户管理 2. 教师模块2.1 考试管理2.2 浏览试题列表2.3 添加试题2.4 成…

0基础学Python系列【16】自动化邮件发送的终极教程:Python库smtplib与email详解

大家好,欢迎来到Python学习的第二站!🎉 Python自带了一些超好用的模块,可以让你不必从头写代码就能实现很多功能。比如数学计算、文件操作、网络通信等。花姐会挑选常用的一些模块来讲解,确保你能在实际项目中用到。🎉 本章要学什么? 接下来花姐会深入浅出的讲解下面…

环卫车辆定位与监管:安心联车辆监控管理平台--科技赋能城市环境卫生管理

一、 引言 城市环境卫生是城市文明的重要标志,也是城市管理的重要内容。随着城市化进程的加快,环卫作业范围不断扩大,环卫车辆数量不断增加,传统的管理模式已难以满足现代化城市管理的需求。为提高环卫作业效率,加强环…