蓝牙安全入门——两道CTF题目复现

news2024/11/15 12:44:09

文章目录

  • 蓝牙安全入门
    • 题目 low_energy_crypto
      • 获取私钥
      • 解密
    • 题目 蓝牙钥匙的春天
      • 配对过程
      • 配对方法
      • 密钥分发
      • 数据加密
      • 安全漏洞和保护
      • 实际应用
      • 实际应用

蓝牙安全入门

🚀🚀最近一直对车联网比较感兴趣,但是面试官说我有些技术栈缺失,所以还得狠狠补,先从蓝牙开始吧,因为刚好有道CTF的题目可以复现一下。

参考资料:

蓝牙CTF题目汇总 (yuque.com) 所有的文件都在大佬的网页里面,需要的可以自己去下载。

CTFtime.org / Cyber Apocalypse 2021 / Low Energy Crypto / Writeup 因为有一步有点问题,所以后面按照这个大佬的步骤来的。

题目 low_energy_crypto

🚀🚀首先题目打开是这样子的(如果显示不全,那就是版本问题,我终于换掉了我老掉牙的wireshark :happy:):

在这里插入图片描述

获取私钥

🚀🚀我们很容易就能看到有些Tx和Rx数据,而且看到了UART,这个主要是用来通信和传递数据的,所以我们就打开看一眼传输的内容:

在这里插入图片描述

🚀🚀我们能看到类似于公钥的东西,我们先提取出来,这里是有两部分:

-----BEGIN PUBLIC KEY-----
MGowDQYJKoZIhvcNAQEBBQADWQAwVgJBAKKPHxnmkWVC4fje7KMbWZf07zR10D0m
B9fjj4tlGkPOW+f8JGzgYJRWboekcnZfiQrLRhA3REn1lUKkRAnUqAkCEQDL/3Li
4l+RI2g0FqJvf3ff
-----END PUBLIC KEY-----

🚀🚀这个地方可以使用RsaCtfTool.py来解密,但是我没成功,运行的时候有问题,就想着换一种办法,如下所示,我们先恢复私钥:

openssl rsa -in ../pub.key -text -inform PEM -pubin

# Public-Key: (512 bit)
# Modulus:
#     00:a2:8f:1f:19:e6:91:65:42:e1:f8:de:ec:a3:1b:
#     59:97:f4:ef:34:75:d0:3d:26:07:d7:e3:8f:8b:65:
#     1a:43:ce:5b:e7:fc:24:6c:e0:60:94:56:6e:87:a4:
#     72:76:5f:89:0a:cb:46:10:37:44:49:f5:95:42:a4:
#     44:09:d4:a8:09
# Exponent:
#     00:cb:ff:72:e2:e2:5f:91:23:68:34:16:a2:6f:7f:
#     77:df
# writing RSA key
# -----BEGIN PUBLIC KEY-----
# MGowDQYJKoZIhvcNAQEBBQADWQAwVgJBAKKPHxnmkWVC4fje7KMbWZf07zR10D0m
# B9fjj4tlGkPOW+f8JGzgYJRWboekcnZfiQrLRhA3REn1lUKkRAnUqAkCEQDL/3Li
# 4l+RI2g0FqJvf3ff
# -----END PUBLIC KEY-----

🚀🚀输出如上所示,然后我们把十六进制转为十进制,使用的脚本如下所示:

hex_string = """
00:a2:8f:1f:19:e6:91:65:42:e1:f8:de:ec:a3:1b:
59:97:f4:ef:34:75:d0:3d:26:07:d7:e3:8f:8b:65:
1a:43:ce:5b:e7:fc:24:6c:e0:60:94:56:6e:87:a4:
72:76:5f:89:0a:cb:46:10:37:44:49:f5:95:42:a4:
44:09:d4:a8:09
"""

# 移除换行符和冒号
hex_string_clean = hex_string.replace("\n", "").replace(":", "")

# 将整个十六进制字符串转换为整数
int_value = int(hex_string_clean, 16)

# 打印结果
print(f"Hex: {hex_string_clean} -> Int: {int_value}")

🚀🚀然后我们就得到了n和e,使用在线网站(http://factordb.com/index.php)来获得q,p,结果如下所示:

p = 92270847179792937622745249326651258492889546364106258880217519938223418249279

q = 92270847179792937622745249326651258492889546364106258880217519938223418258871

e = 271159649013582993327688821275872950239

🚀🚀然后下载这个py文件(rsatool/rsatool.py at master · ius/rsatool (github.com)),使用如下命令,可能会缺少库,自己安装一下就好了:

python rsatool.py -p 92270847179792937622745249326651258492889546364106258880217519938223418249279 -q 92270847179792937622745249326651258492889546364106258880217519938223418258871 -e 271159649013582993327688821275872950239 -o priv.key

🚀🚀结果如下所示,我们就获得了私钥:

-----BEGIN RSA PRIVATE KEY-----
MIIBRwIBAAJBAKKPHxnmkWVC4fje7KMbWZf07zR10D0mB9fjj4tlGkPOW+f8JGzg
YJRWboekcnZfiQrLRhA3REn1lUKkRAnUqAkCEQDL/3Li4l+RI2g0FqJvf3ffAkBY
f1ugn3b6H1bdtLy+J6LCgPH+K1E0clPrprjPjFO1pPUkxafxs8OysMDdT5VBx7dZ
RSLx7cCfTVWRTKSjwYKPAiEAy/9y4uJfkSNoNBaib393y3GZu+QkufE43A3BMLPC
ED8CIQDL/3Li4l+RI2g0FqJvf3fLcZm75CS58TjcDcEws8I1twIgJXpkF+inPgZE
TjVKdec6UGg75ZwW3WTPEoVANux3DscCIDjx+RSYECVaraeGG2O/v8iKe6dn1GpM
VGUuaKecISArAiA0QRYkZFB5D4BnOxGkMX3ihjn7NFPQ7+Jk/abWRRq6+w==
-----END RSA PRIVATE KEY-----

解密

🚀🚀之后解密一下传输的加密内容就好了,加密内容如下所示:

在这里插入图片描述

🚀🚀提取出来把后面多余的0删除,便可以解密了,使用命令如下所示:

openssl rsautl -decrypt -raw -inkey priv.key -in flag

🚀🚀结果如下所示:

The command rsautl was deprecated in version 3.0. Use 'pkeyutl' instead.
�5������p+wɹ�[R�.;����^�bs� �6yflag{5cf7b-9f8f1e-688-9f80f}

🚀🚀最后我们就拿到了我们的flag{5cf7b-9f8f1e-688-9f80f}

题目 蓝牙钥匙的春天

🚀🚀这个比较简单,所以只是介绍一下SMP协议:

🚀🚀蓝牙中的安全管理协议(Security Manager Protocol,SMP)是负责蓝牙设备间的配对和加密的协议。SMP在蓝牙低功耗(Bluetooth Low Energy, BLE)和经典蓝牙(Bluetooth Classic)中有所不同,但它们的主要功能是相似的。下面是对蓝牙低功耗中的SMP协议的详细介绍:

配对过程

🚀🚀SMP的主要功能之一是处理设备间的配对过程。配对过程的主要目的是建立一个安全的连接,确保数据传输的机密性和完整性。配对过程通常包括以下步骤:

  • 配对特征交换:设备交换配对请求和响应,以决定使用的安全功能和认证方法。
  • 生成和交换临时密钥(Temporary Key, TK):设备生成一个临时密钥,用于保护接下来的密钥交换过程。
  • 生成和交换短期密钥(Short Term Key, STK):使用临时密钥生成短期密钥,短期密钥用于初次加密连接。
  • 生成和交换长期密钥(Long Term Key, LTK):生成长期密钥,用于加密以后的连接。

配对方法

🚀🚀SMP支持多种配对方法,每种方法提供不同级别的安全性:

  • Just Works:无需用户输入,用于低安全需求的场景。
  • Passkey Entry:一方输入另一方显示的6位数密码,用于中等安全需求。
  • Numeric Comparison:双方显示一个6位数并进行比较,用于高安全需求。
  • Out of Band (OOB):使用蓝牙之外的通信渠道(如NFC)交换配对信息,用于最高安全需求。

密钥分发

🚀🚀在配对过程中,设备之间会分发各种密钥,用于加密和身份验证:

  • 长期密钥(LTK):用于加密数据。
  • 连接签名密钥(CSRK):用于数据签名,确保数据完整性。
  • 身份信息(IRK):用于设备身份验证和隐私保护。

数据加密

🚀🚀配对完成后,SMP使用生成的密钥对数据进行加密。蓝牙低功耗使用AES-CCM(Counter with CBC-MAC)算法进行加密,确保数据的机密性和完整性。

安全漏洞和保护

🚀🚀虽然SMP提供了强大的安全功能,但它也可能受到各种攻击,如中间人攻击(MITM)和旁路攻击。为了提高安全性,建议:

  • 使用高安全级别的配对方法。
  • 经常更新设备固件以修补已知的安全漏洞。
  • 在设计蓝牙应用时考虑使用额外的加密和认证机制。

实际应用

🚀🚀SMP广泛应用于需要安全数据传输的蓝牙设备,如智能手表、健身追踪器、无线耳机和医疗设备。通过确保设备间的安全配对和数据加密,SMP在保护用户隐私和数据安全方面起到了重要作用。

  • 使用高安全级别的配对方法。
  • 经常更新设备固件以修补已知的安全漏洞。
  • 在设计蓝牙应用时考虑使用额外的加密和认证机制。

实际应用

🚀🚀SMP广泛应用于需要安全数据传输的蓝牙设备,如智能手表、健身追踪器、无线耳机和医疗设备。通过确保设备间的安全配对和数据加密,SMP在保护用户隐私和数据安全方面起到了重要作用。

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

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

相关文章

【Linux】进程7——进程地址空间

1.再谈fork 之前提到了fork之后对父子进程返回不同的id值,给父进程返回子进程的pid,给子进程返回0,所以对于一个id如何存储两个值的说法,在我们之前已经提到过了一个概念叫做写时拷贝,就是在子进程要想修改父进程的id…

AI 边缘计算平台 - 回归开源 BeagleY-AI 简介

BeagleBoard.org 于 3 月 27 号发布了一款单板计算机 BeagleY-AI ,这款 SBC 凭借其完全开源的特性,旨在激发并推动开源社区的生态系统繁荣发展。 一、简介: BeagleY-AI 采用德州仪器新推出的 AM67A AI 视觉处理器。这款处理器集成了四个 64…

招聘在家抄书员?小心是骗局!!!

在家抄书员的骗局是一种常见的网络诈骗手段,旨在利用人们想要在家轻松赚钱的心理。这种骗局通常会以招聘兼职抄写员的形式出现,声称只需在家中抄写书籍即可赚取可观的收入。然而,实际上这背后隐藏着诸多陷阱和虚假承诺。 首先,这些…

程序猿大战Python——流程控制——while循环

程序里的循环 目标:了解循环语句的作用。 在程序中,有时候会遇到代码需要重复多次运行的情况。 例如,一起来完成: (1)在生活中做事没让媳妇儿满意,跟她承认错误,说10遍&#xff1a…

Java加密体系结构参考指南-Java Cryptography Architecture

本文是从英文的官网摘了翻译的,用作自己的整理和记录。水平有限,欢迎指正。版本是:22 原文地址:https://docs.oracle.com/en/java/javase/22/security/java-cryptography-architecture-jca-reference-guide.html#GUID-815542FE-CF…

Vue 2看这篇就够了

Vue 2 技术文档 Vue.js 是一款用于构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。而 Vue.js 2(以下简称 Vue…

Java——IO流(一)-(2/9):File类的常用方法(判断文件类型、获取文件信息、创建删除文件、遍历文件夹)

目录 常用方法1:判断文件类型、获取文件信息 方法 实例演示 常用方法2:创建文件、删除文件 方法 实例演示 常用方法3:遍历文件夹 方法 实例演示 常用方法1:判断文件类型、获取文件信息 方法 File提供的判断文件类型、获…

转型AI产品经理(6):“ 序列位置效应”如何应用在Chatbot产品中

序列位置效应是心理学中的一个记忆现象,指的是人们对一系列信息的记忆效果受到信息在序列中位置的影响。具体来说,人们通常更容易记住列表的开头和结尾部分的项目,而对中间部分的项目记忆较差。这个效应可以进一步分为“首因效应”和“近因效…

32、matlab:基于模板匹配的车牌识别

1、准备工作 1)准备材料 车牌字符模板和测试的实验车牌 2)车牌字符模板 数字、字母和省份缩写 3)测试车牌 四张测试车牌 2、车牌识别实现(已将其嵌入matlab) 1)打开APP 找到APP 找到我的APP双击点开 2)界面介绍 包括&am…

最新下载:Navicat for MySQL 11软件安装视频教程

软件简介: Navicat for MySQL 是一款强大的 MySQL 数据库管理和开发工具,它为专业开发者提供了一套强大的足够尖端的工具,但对于新用户仍然易于学习。Navicat For Mysql中文网站:http://www.formysql.com/ Navicat for MySQL 基于…

html+CSS+js部分基础运用19

1. 应用动态props传递数据,输出影片的图片、名称和描述等信息【要求使用props】,效果图如下: 2.在页面中定义一个按钮和一行文本,通过单击按钮实现放大文本的功能。【要求使用$emit()】 代码可以截图或者复制黏贴放置在“实验…

Nginx之初识

1.Nginx概述 Nginx是一个高性能的反向代理和Web服务器软件,因其系统资源消耗低、运行稳定且具有高性能的并发处理能力等特性,在互联网企业中得到广泛的应用。 2.Nginx特性 1.访问路由 现今大型网站的请求量早已不是单一Web服务器可以支撑的了。单一入口…

ESP32:FreeRTOS节拍配置(vTaskDelay延时10ms改为1ms)

文章目录 背景方法手动修改sdkconfig通过idf.py menuconfig 背景 在FreeRTOS的默认配置中,任务调度的频率默认是100HZ,因此默认vTaskDelay默认延时是10ms。 FreeRTOS 的系统时钟节拍可以在配置文件 FreeRTOSConfig.h 里面设置:#define confi…

基于改进YOLOv5的小目标检测 | 添加CBAM注意机制 + 更换Neck网络之BiFPN + 增加高分辨率检测头

前言:Hello大家好,我是小哥谈。本文针对图像中小目标难以检测的问题,提出了一种基于YOLOv5的改进模型。在主干网络中,加入CBAM注意力模块增强网络特征提取能力;在颈部网络部分,使用BiFPN结构替换PANet结构&…

【YOLOv5进阶】——修改网络结构(以C2f模块为例)

一、站在巨人的肩膀上 这里我们借鉴YOLOv8源码: 上期说到,对于网络模块定义详情在common.py这个文件,如Conv、CrossConv、C3f等。本期要修改的需要参考YOLOv8里的C2f模块,它定义在YOLOv8的module文件夹的block.py文件里&#xf…

1900springboot VUE 生态菜园管理系统开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot VUE生态菜园管理系统是一套完善的完整信息管理类型系统,结合springboot框架和VUE完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和…

c#未能加载基类System错误 这台计算机上缺少此项目引用的 NuGet 程序包

拷贝代码到另一台计算机运行,打开Form1.cs报错 首先确认package的框架 如果是472,则更换472的框架 打开项目->xx属性,进行修改 如果框架正确,就是未识别到程序包 可以参考: https://www.cnblogs.com/txwtech/p/1…

⌈ 传知代码 ⌋ 【CLIP】文本也能和图像配对

💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

Django学习(1)Model

模型 1、Django操作指令 2、Django模型字段类型 3、Django模型字段类型属性 4、Django模型Meta属性

WINUI——Behavior(行为)小结

前言 在使用MVVM进行WINUI或WPF开发时,Command在某些时候并不能满足逻辑与UI分离的要求。这时肯定就需要其它技术的支持,Behavior就是一种。在WPF中是有Behavior直接支持的,转到WINUI后,相对有一些麻烦,于是在此记录之…