当前位置: 首页 > news >正文

Python简单模拟蓝牙车钥匙协议

本文设计一个简单的蓝牙车钥匙协议,协议包含DH密钥协商和基于RSA的身份认证功能,以及防重放与消息完整性验证。

1. 密钥协商过程:
- 设定 DH 参数:素数 p 和生成元 g。
- 发送方(Alice)生成 DH 的私钥 a 并计算公钥 A = g^a mod p。
- 接收方(Bob)生成 DH 的私钥 b 并计算公钥 B = g^b mod p。
- Alice 和 Bob 交换各自的公钥 A 和 B。
- Alice 和 Bob 分别根据对方的公钥计算出共享密钥:Alice 的共享密钥 S_Alice = B^a mod p,Bob 的共享密钥 S_Bob = A^b mod p。

2. 身份认证过程:
- Alice 生成 RSA 密钥对,私钥 Private_Alice 和公钥 Public_Alice。
- Alice 将 Public_Alice 发送给 Bob。
- Bob 生成 RSA 密钥对,私钥 Private_Bob 和公钥 Public_Bob。
- Bob 将 Public_Bob 发送给 Alice。
- Alice 使用 Bob 的公钥 Public_Bob 对消息进行加密,确保只有 Bob 能够解密看到该消息。
- Bob 使用自己的私钥 Private_Bob 对消息进行解密和验证。

3. 防重放与消息完整性验证:
- 在通信过程中,每条消息附带一个唯一的序列号或时间戳。
- 在接收方收到消息后,会比较序列号或时间戳,并使用哈希函数计算消息的散列值。
- 接收方会保存已收到的序列号或时间戳,以及对应的散列值。
- 如果接收到重复的序列号或时间戳,或者消息的散列值不匹配,接收方将丢弃该消息。

这只是一个基本示例,实际应用中可能需要更复杂的协议设计和安全验证措施。

下面用Python实现该蓝牙钥匙协议的核心功能:

```python
import hashlib
import secrets
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256

# 密钥协商
def key_exchange():
    # 生成DH参数
    p = 8124599  # DH的素数p
    g = 7  # DH的生成元g

    # 生成私钥和公钥
    private_key = secrets.randbelow(p-1) + 1
    public_key = pow(g, private_key, p)

    # 发送公钥给对方
    # ...

    # 接收对方的公钥
    # ...

    # 计算共享密钥
    shared_key = pow(public_key, private_key, p)

    return shared_key


# 身份认证
def authenticate(shared_key):
    # 生成RSA密钥对
    key = RSA.generate(2048)

    # Alice进行签名
    signature_alice = sign_data("Alice", key)

    # 将密钥和签名发送给Bob
    # ...

    # Bob验证签名并生成自己的签名
    signature_bob = sign_data("Bob", key)

    # 将签名发送给Alice
    # ...

    # Alice验证Bob的签名
    verify_signature("Bob", signature_bob, key)

    # 完成身份验证
    # ...


# 签名数据
def sign_data(data, key):
    signer = pkcs1_15.new(key)
    digest = SHA256.new(data.encode('utf-8'))
    signature = signer.sign(digest)
    return signature


# 验证签名
def verify_signature(data, signature, key):
    verifier = pkcs1_15.new(key.publickey())
    digest = SHA256.new(data.encode('utf-8'))
    try:
        verifier.verify(digest, signature)
        print("Signature is valid.")
    except (ValueError, TypeError):
        print("Signature is invalid.")


# 防重放和消息完整性验证
def verify_replay_attack(message, nonce, mac, shared_key):
    # 检查重放攻击,验证nonce是否已经使用过
    # ...

    # 计算消息和共享密钥的HMAC
    computed_mac = hashlib.sha256((message + str(shared_key)).encode('utf-8')).hexdigest()

    # 验证MAC是否匹配
    if computed_mac == mac:
        print("Message integrity is confirmed.")
    else:
        print("Message integrity is compromised.")


# 示例用法
shared_key = key_exchange()
authenticate(shared_key)
message = "Hello, Bob!"
nonce = "123456"
mac = "f1a4142e8d0e2b33a22bcc8bec062105019bcf1bdee96eb76f6fe354e610ca3d"
verify_replay_attack(message, nonce, mac, shared_key)
```

参考如上代码,可以根据具体需求,将发送公钥、签名发送以及验证签名的操作加入到适当的位置。同样,防重放和消息完整性验证的实现可能需要根据具体需求进行修改。以上示例中的密钥大小、消息哈希算法以及消息完整性验证机制仅供参考,读者需要根据自己的需求选择合适的算法和参数。

相关文章:

Python简单模拟蓝牙车钥匙协议

本文设计一个简单的蓝牙车钥匙协议,协议包含DH密钥协商和基于RSA的身份认证功能,以及防重放与消息完整性验证。 1. 密钥协商过程: - 设定 DH 参数:素数 p 和生成元 g。 - 发送方(Alice)生成 DH 的私钥 a 并计算公钥 A…...

【Python3】【力扣题】383. 赎金信

【力扣题】题目描述: 题解: 两个字符串ransomNote和magazine,ransomNote中每个字母都在magazine中一一对应(顺序可以不同)。 即分别统计两个字符串中每个字母出现的次数,ransomNote中每个字母的个数小于等…...

外包搞了6年,技术退步明显......

先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…...

uni-app x生成的安卓包,安装时,提示不兼容。解决方案

找到 manifest.json 进入:源码视图 代码 {"name" : "xxx康养","appid" : "__xxx6","description" : "xxx康养","versionName" : "1.0.12","versionCode" : 100012,&…...

Screenshot To Code

序言 对于GPT-4我只是一个门外汉,至于我为什么要了解screenshot to code,只是因为我想知道,在我不懂前端设计的情况下,能不能通过一些工具辅助自己做一些简单的前端界面设计。如果你想通过此文深刻了解GPT-4或者该开源项目&#…...

SpringBoot 是如何启动一个内置的Tomcat

为什么说Spring Boot框架内置Tomcat 容器,Spring Boot框架又是怎么样去启动Tomcat的?我简单总结下学习过程。 一:简单了解SpringBoot的启动类 我们都知道Spring Boot框架的启动类上是需要使用 @SpringBootApplication 注解标注的, @SpringBootApplication 是一个复合注解…...

《功能磁共振多变量模式分析中空间分辨率对解码精度的影响》论文阅读

《The effect of spatial resolution on decoding accuracy in fMRI multivariate pattern analysis》 文章目录 一、简介论文的基本信息摘要 二、论文主要内容语音刺激的解码任务多变量模式分析(MVPA)K空间 空间分辨率和平滑对MVPA的影响平滑的具体过程…...

pygame实现贪吃蛇小游戏

import pygame import random# 游戏初始化 pygame.init()# 游戏窗口设置 win_width, win_height 800, 600 window pygame.display.set_mode((win_width, win_height)) pygame.display.set_caption("Snake Game")# 颜色设置 WHITE (255, 255, 255) BLACK (0, 0, 0…...

反序列化漏洞(二)

目录 pop链前置知识,魔术方法触发规则 pop构造链解释(开始烧脑了) 字符串逃逸基础 字符减少 字符串逃逸基础 字符增加 实例获取flag 字符串增多逃逸 字符串减少逃逸 延续反序列化漏洞(一)的内容 pop链前置知识,魔术方法触…...

【开箱即用】前后端同时开源!周末和AI用Go语言共同研发了一款笔记留言小程序!

大家好,我是豆小匠。 真的是当你在怀疑AI会不会取代人类的时候,别人已经用AI工具加速几倍的生产速度了… 周末体验了和AI共同开发的感受,小项目真的可以一人全干了… 本次实验使用的AI工具有两个:1. GitHub Copilot(…...

java对xml压缩

import java.util.*; import java.util.zip.GZIPOutputStream; import java.nio.charset.StandardCharsets; import org.apache.commons.codec.binary.Base64;/*** 模板压缩** param xml 模板xml* return* throws Exception*/public static String businessData(String xml) th…...

GoLang切片

一、切片基础 1、切片的定义 切片(Slice)是一个拥有相同类型元素的可变长度的序列它是基于数组类型做的一层封装它非常灵活,支持自动扩容切片是一个引用类型,它的内部结构包含地址、长度和容量声明切片类型的基本语法如下&#…...

前端入门(四)Ajax、Promise异步、Axios通信、vue-router路由、组件库

文章目录 AjaxAjax特点 Promise 异步编程(缺)Promise基本使用状态 - PromiseState结果 - PromiseResult AxiosVue中使用AxiosAxios请求方式getpostput和patchdelete并发请求 Vue路由 - vue-router单页面Web应用(single page web application&…...

正则表达式回溯陷阱

一、匹配场景 判断一个句子是不是正规英文句子 text "I am a student" 一个正常的英文句子如上,英文单词 空格隔开 英文单词 多个英文字符 [a-zA-Z] 空格用 \s 表示 那么一个句子就是单词 空格(一个或者多个,最后那个单词…...

MATLAB实战 | S函数的设计与应用

S函数用于开发新的Simulink通用功能模块,是一种对模块库进行扩展的工具。S函数可以采用MATLAB语言、C、C、FORTRAN、Ada等语言编写。在S函数中使用文本方式输入公式、方程,非常适合复杂动态系统的数学描述,并且在仿真过程中可以对仿真进行更精…...

Day41 使用listwidget制作简易图片播放器

1.简介 使用QlistWidget实现简易图片播放器,可以打开一个图片序列,通过item的单击事件实现图片的切换,通过设置list的各种属性实现图片预览的显示,美化滚动条即可实现一个简易图片播放器。 2.效果 3.实现步骤: 1.初始…...

matlab 基于卡尔曼滤波的GPS-INS的数据融合的导航

1、内容简介 略 25-可以交流、咨询、答疑 2、内容说明 基于卡尔曼滤波的GPS-INS的数据融合的导航 "基于卡尔曼滤波的GPS-INS的数据融合的导航 基于卡尔曼滤波实现GPS-INS组合导航系统" 卡尔曼滤波、GPS、INS、数据融合、导航 3、仿真分析 4、参考论文 略 …...

vivado实现分析与收敛技巧6-策略建议

典型时序收敛策略需运行大量实现策略并选取其中最佳的策略以供在实验室内应用。 ML 策略同样可选 , 且只需您运行3 项策略即可达成类似的 QoR 收益。这些策略使用机器学习来检验布线后设计的各项功能特性 , 以便预测相同设计上不同策略的性能。在 repo…...

SOCKET、TCP、HTTP之间的区别与联系

SOCKET、TCP、HTTP之间的区别与联系 一、 Socket 1、什么是socket2、为什么需要socket3、建立socket连接 二、HTTP(基于TCP) 1、HTTP的概念2、HTTP连接的特点 连接请求:一次连接连接请求:短连接(socket是长连接) 三、TCP/IP协议簇 四、HTTP、Socket…...

javascript的Proxy

1. 什么是Proxy Proxy是ES6中新增的一个特性,它可以拦截对象的操作,提供了一个中间层来控制对目标对象的访问。简单来说,它可以对对象进行代理,从而实现对对象的监控、修改、过滤等操作。 2. 为什么出现Proxy 在JavaScript中&a…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...