BB84协议:量子秘钥分发

news2025/2/12 16:01:12

文章目录

  • 为什么需要量子密钥分发
    • 通讯工具
    • 基本通讯
  • BB84协议
  • 为什么这样做能防止通讯被窃听?
    • 在传统信道上的窃听
    • 在量子信道上的窃听
  • 内容来源:

为什么需要量子密钥分发

BB84协议是一种“密钥分发协议”,所以从功能上来讲,它要实现的目标与之前的一篇密码学专栏里介绍的RSA加密算法一样,都是安全地传递密钥。相信大家也听说过,RSA算法从原理上来讲并不是不可破解的而是“很难破解”的,即通过公钥破解加密的密文并不是不可能做到,而是通过公钥破解密文很难,可能需要成百上千年。这就相当于让破解者做一道很难算的数学题,等破解者算出来,这次通讯已经结束,对称密钥已经弃用,破解已经没有意义了。

但是可以想见的是,随着计算机性能的不断提升,原来需要成百上千年才能做出来的数学难题现在说不定只用几秒就能算出来,而且新兴的量子计算也对RSA加密算法构成威胁,理论上讲,密钥为1024位长的RSA算法,用一台512量子比特位的量子计算机在 1秒内即可破解。

而本篇博文介绍的BB84协议就是一种比RSA更可靠的密钥分发机制(更准确地说,BB84是一种密钥协商机制,但我们暂时不区分“密钥分发”与“密钥协商”的区别)。

通讯工具

首先,BB84协议要求通信双方拥有一条量子信道的同时,还拥有一条传统信道。

然后在量子信道上,信息发送方需要4种状态的量子作为信使,信息接收方需要2种量子接收器。为了避开深奥的量子知识,我们想象4种量子信使是4种姿态不同的飞镖,我们把飞镖分成两组:“横竖”组和“撇捺”组。
在这里插入图片描述

两组量子信使需要分别使用两种不同的接收器来接收。“横竖”组对应“+”形接收器,“撇捺”组对应“x”形接收器。

在这里插入图片描述

基本通讯

我们规定每组量子中有一种姿态代表0,另一种代表 1。例如,我们规定,接收到“横”代表0,那么,接收到“竖”代表 1。同理,规定接收到“撇”代表0,接收到“捺”代表 1。
在这里插入图片描述
现在如果我们挑选正确的接收器,那么我们能正确地接收到信息发送者想发给我们的信息。例如,我们如果用“+”形接收器来接收姿态为“横”的量子,那么我们得到的信号就是“横”,那么发送者想传递的“0”这个信号就会被我们正确地接收到。
在这里插入图片描述

**如果我们没有用正确的接收器会发生什么呢?**如果我们用“x”形接收器接收姿态为“横”的量子会发生什么呢?量子信使会撞在接收器的入口上,导致接收器接收不到信使吗?不一定。

下面是这篇博文里唯一与量子力学相关的知识:姿态为“横”的量子经过“x”形接收器时,有可能会改变自己的姿态,变成能通过接收器的姿态,也就是姿态为“横”的量子经过“x”形接收器时,姿态可能变为“撇”,也可能变为“捺”,那么传达的信息有可能还是发送者想传达的0,但也可能变成了相反的 1。
在这里插入图片描述
错误地使用“+”形接收器接收“撇捺”组量子信使同理,信息接收者无法分辨原本信息的发送者想传递的究竟是0还是 1。

BB84协议

有了上面的铺垫,我们可以开始了解BB84协议的具体内容。容我重复一次,BB84协议要求通信双方有两条信道:一条量子信道,一条传统信道。

按密码学传统,我们把信息发送者叫做Alice,信息接收者叫做Bob。现在他们要用BB84协议,为他们的通信确定一个密钥。

  • 第一步:Alice选出一串二进制串(01101100001001…),命名为S。
  • 第二步,Alice逐位地、随机地为S的每一位指定量子信使的组。
  • 例如S的某一位是 1,Alice为这一位指定的量子信使组是“撇捺”组。那么稍后这一位上的 1就会用姿态为“捺”的量子信使发射出去,而不用姿态为“横”的信使。
  • 第三步,Bob随机地用一系列的接收器接收Alice发来的量子信使,得到一系列0、1二进制串。
    • 由于Bob并不知道Alice发送的量子信使种类是怎么排列的,可以想见的是,Bob会在很多位上使用错误的量子接收器接收量子信使。例如发送的二进制串的某一位上是 1,Alice用的是“横竖”组的竖姿态量子信使发送这一位的 1,但是Bob可能选择了“x”形接收器来接收这一位信息。结果可能是Bob得到了错误的信号0,(当然也可能是碰巧还是得到了正确的 1,因为“x”形接收器接收竖姿态量子,可能得到撇姿态量子,也可能得到捺姿态量子。)

在量子信道上的通讯其实就结束了,接下来的步骤4-7都是在传统通信信道上进行的。我们认为传统信道意味着攻击者可能窃听并修改信道中会话内容。

  • 第四步,Bob通过传统信道中告诉Alice自己的测量方法,即自己用哪种接收器来接收S的每一位信息。例如,Bob会告诉Alice:我第一位用的“+”形接收器、第二位用的“x”形、第三位用的“x”形…

    • Bob在这一步只告诉Alice自己是怎么测量的,没有告诉Alice自己测量的结果。
  • 第五步,Alice收到Bob的测量方法后,对比自己的发送量子信使的情况,告诉Bob他在哪些位上碰巧用了正确的接收器。我们把正确测量的位的集合称为C,Alice把C发送给Bob。

    • 例如,Alice发现第2位自己发射的是撇姿态量子,而Bob正好是用“x”形接收器接收的量子,那么Bob第二位的测量是正确的,则第2位属于C。然后,Alice发现自己第3位发送的是竖姿态量子,而Bob在这一位上使用的是“x”形接收器,那么Bob第三位的测量方式就是错误的,则第3位不属于C。
  • 第六步,Bob收到Alice的信息,知道了自己哪些位的测量方式是正确的,即知道了集合C。他在自己测量正确的那些位中,随机挑选出一部分位,把测量到的结果发送给Alice。我们把Bob从C中挑出的那一部分叫集合D。

    • 例如Bob从Alice的信息中得知自己第6、8、17、45、46、56位的测量方式是正确的(集合C),那么他随机挑出几位,例如,挑出第6、17、45位,这就是集合D。Bob将属于D的这几位上自己测到的结果(是0还是 1)发送给Alice:“我在第6、17、45位分别测到了 1、1、0”。
  • 第七步,Alice收到信息后核对自己在6、17、45位上发送的信息是不是如Bob所说的 1、1、0。如果是,那么Alice发送信息给Bob示意没问题,那么双方会在Bob一开始测量正确的位(集合C)中,剔除第六步Bob发回给Alice的那些位(集合D),剩下的位(集合C\D)作为双方通信的密钥。

按上述例子,Bob在第6、8、17、45、46、56位的测量方式是正确的,他又把第6、17、45位发回给Alice,那么用作通信密钥的就是剩下的8、46、56位的值。例如Alice最开始发送的二进制字符串S中第8、46、56位值分别为 1、0、1,由于这几位Bob用了正确的接收器,所以Bob接收到的也是 1、0、1,双方都会以“101”作为通讯密钥,密钥协商的目的达成。

为什么这样做能防止通讯被窃听?

在传统信道上的窃听

按照密码学传统,我们称窃听者为Eve。如果Eve在传统信道上窃听,她会在上述第四步听到Bob的测量方式,但是Bob没有发送测量结果。Eve还会听到Bob一部分正确测量位以及测出的结果(上述第六步中,Eve会听到集合D以及对应的测量值),但是最后Alice与Bob选择通信密钥时会完全丢弃集合D,即完全丢弃在传统信道交流过的那些位。到最后,Eve只知道Alice与Bob使用了S的哪些位用作通讯密钥,但是Eve不知道这些位上的具体数值是多少。

在量子信道上的窃听

Eve遇到上面的困难,心一横,决定去窃听量子信道上Alice一开始传给Bob的二进制串S。但是首先Eve就遇到一个问题:她不知道该选用什么接收器序列来接收量子信使(连Bob都不知道)。

Eve又心一横,用了一组随机的量子接收器序列接收量子信使。这样一来Eve必然使用了很多不合适的接收器,这样也就导致了一些量子信使的状态被改变,这些改变会在Alice-Bob后续的交流中被察觉。

例如,S在某一位上的值是 1,Alice用竖姿态量子信使发送了这一位信息,但是Eve错用“x”形接收器接收这一位信息,这样此量子可能变成了撇量子(或捺量子),但Bob在这一位上恰好猜对了,他用“+”形接收器接收经过Eve窃听过的量子信使(撇或捺量子信使),结果量子信使变成了横姿态量子信使(当然也有接收成竖姿态量子,信息碰巧正确地被传递了,这时这一位不会引起Alice-Bob的注意),原本是 1的值Bob用合适的接收器接收却得到了0。
在这里插入图片描述

然后在上述协议的第六步,选集合C的时候,如果Bob正好把这一位选中发给了Alice,那么Alice就会发现Bob在这一位上明明使用了正确的接收器却没有得到正确的值。

这种情况出现频率超过某个阈值,Alice就会察觉有人在窃听量子信道。

在这里插入图片描述

所以其实BB84协议只能保证通讯被窃听的时候,通讯双方能及时发现,之后要么切换信道,要么终止通信。

内容来源:

[1]https://zhuanlan.zhihu.com/p/22474140

[2]https://mp.weixin.qq.com/s/gZ0faqCzRV1ouAGlFwdHhQ

[3]https://zhuanlan.zhihu.com/p/29860637

本文首发于http://handsomejintian.com/ 作者:唐秦-TQ https://www.bilibili.com/read/cv6245912/ 出处:bilibili

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

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

相关文章

618大促 | 解析平台、商家和消费者必须面对的三大风险

目录 618年中大促的三大风险 商家乐此不疲的“刷单炒信” 消费者无计可施的“薅羊毛” 平台恨之入骨的“恶意爬虫” 618三类欺诈风险的特点 618电商平台的业务安全防控之道 618大促再次开启,各平台及商家的促销大战如火如荼。 2023年618,京东推出…

【状态估计】用于非标量系统估计的最优卡尔曼滤波(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

leetcode数据结构题解(Java实现,第一天和第二天)

文章目录 第一天217. 存在重复元素53.最大子数组和 第二天1. 两数之和88. 合并两个有序数组 第一天 217. 存在重复元素 题解思路:首先题目需要的是判断数组中是否存在相同的数字,存在返回true,不存在就返回false。 那么显然可以这样做,先进行…

内网IM即时通讯软件WorkPlus,快速连接工作的沟通利器

在当今信息高度发达的时代,企业内部沟通的重要性不言而喻。随着企业团队的扩大和分布式办公的兴起,即时通讯软件成为了一种必不可少的工具。通过即时通讯软件,团队成员可以实时交流和协作,快速解决问题,加快决策过程。…

Echarts的地图实现拖拽缩放同步功能(解决多层geo缩放、拖动卡顿问题)

项目场景: 大屏项目显示云南省3D的地图,可拖拽缩放、地图打点、点击图标弹框等等功能 问题描述 多图层拖拽时会上下层会分离,延迟卡顿 原因分析: 1、拖拽时不同图层的中心坐标没有保持一致, 2、卡顿是数据更新动画时…

玩业余无线电时,突然听到有人呼救,该怎么办?

不管是在玩业余无线电还是在其他活动当中,突然遇到有人求救,都是一件非常重要的事情,因为救援行动的效率快慢和是否及时,都有可能影响到别人的生命安全。 下面是河南宝蓝小编给出的一些思考和建议,希望对大家会有一些帮…

软件测试-测试用例

目录 测试用例的四个要素 测试用例设计方法 基于需求进行测试用例的设计 等价类 边界值 判定表 正交表 通过allpirs画正交表 场景设计法 错误猜测法 面试题 如何模拟弱网 接口如何测试 zip命令测试 测试用例万能公式 水杯测试用例 微信发朋友圈 测试用例的四个…

Java实现的五子棋游戏 ~java.awtjava.swing

文章目录 Java实现的五子棋游戏1.实现效果2.实现源码2.1运行主函数main.java2.2 棋盘布局Chessboard.java3.Algorithm算法 点击下载链接:Java实现的五子棋游戏源码下载 Java实现的五子棋游戏 作业要求: (1)课题代号: …

老Mac电脑安装macOS Ventura实战

前提说明:此实战适用于老旧Mac电脑(2015年之前的,无法在系统设置中升级macOS Ventura系统的电脑)安装macOS Ventura系统! 软件:OpenCore-Patcher-GUI.app.zip 工具:16G U盘、或者移动硬盘&a…

Spring MVC拦截器Interceptor使用(判断用户登录)

文章目录 一 概念二 3步使用三 HandlerInterceptor接口四 代码实现 一 概念 Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验…

superset链接本地数据库

打开图中 选择database 先解释SQLlite的格式 如下 SQLALCHEMY_DATABASE_URI mysql://username:password127.0.0.1:3306/gmall_report’ 请将 username 和 password 替换为实际的 MySQL 数据库的用户名和密码。 mysql则为如下

我有过密接的9个博士

我有过密接的9个博士 是我人生中留下的印迹和谈资 其中一个是中科大少年班的学神 趣讲大白话:多点谈资 【趣讲信息科技196期】 **************************** 我密接过的哪些博士们: 1、科大少年班刘雪峰博士。1998年,创智公司(当…

Banana Pi BPI-R3 Mini:2.5GbE 嵌入式路由器板,MTK7986方案

香蕉派 BPI-R3 Mini Banana Pi BPI-R3 Mini 是一款功能强大的 SBC 路由器板,专为需要高速网络功能的个人和企业而设计。这款路由器是广受欢迎的 Banana Pi R3 路由器板的小兄弟,配备了先进的功能,旨在提供可靠的性能,是需要可靠网…

元宇宙游戏:新瓶换新酒

当你打游戏时,你在打什么? 抛出这个问题,便也抛出了游戏背后的组成——设计、技术、应用。 在元宇宙产业链中最有感知度的,是场景和内容,作为现实世界的模拟与延伸,游戏和社交领域是最先具备实现基础的元…

存储基础知识及相关术语

存储基础知识 前置:存储基本概念 我们现在处于信息时代,每天都在和电脑、手、平板机打交道。我们的工作和生活,已经完全离不开视频、音乐、图片、文本、表格这样的数据文件。 而所有这些数据文件,都需要通过电子设备进行保存&…

Windows控制关机锁屏

原文链接 设置永不关机 新建一个vbs文件,内容如下: Set WshShell WScript.CreateObject("WScript.Shell") do WScript.sleep 60000 WshShell.SendKeys "{ScrollLock}" loop该程序的作用相当于每隔一分钟(60000毫秒&a…

了解MVC、MVP、MVVM模式

前言 在Android开发中,当你梳理完需求后,你要做的并不是马上写下你的第一行代码,而是需先设计好整个项目的技术框架今天,我将全面介绍Android开发中主流的技术框架MVC、MVP 与 MVVM模式,并实例讲解MVP模式&#xff0c…

Android启动优化实践

作者:95分技术 启动优化是Android优化老生常谈的问题了。众所周知,android的启动是指用户从点击 icon 到看到首帧可交互的流程。 而启动流程 粗略的可以分为以下几个阶段 fork创建出一个新的进程创建初始化Application类、创建四大组件等 走Applicatio…

uni-app配置Vant Weapp

uni-app配置vant-------浏览器运行环境下不兼容 1.创建uni-app项目2.创建wxcomponents目录3. 安装vant需要的模块包3.1找一个空文件cmd 进入执行3.1.1通过 npm 安装3.1.2通过 npm 安装 3.2.1获取dist文件 4.将dist内容复制到wxcomponents目录下5.1 使用vant5.1使用button按钮5.…

Qt扫盲-QKeyEvent 键盘事件

QKeyEvent 键盘事件 一、概述二、事件传播三、常用属性1. key()2. modifiers()3. isAutoRepeat()4. text() 四、简单组合键代码 一、概述 QKeyEvent 是Qt 里面描述键盘事件的一个属性类,所有的事件本质上来说其实就是一个信息包,而这个包里面就是有这个…