轻量级加密密钥交换协议

2024-04-16

我有一个嵌入式系统通过 HTTP 将数据发布到 JSON REST 服务。我目前正在使用 HMAC-SHA1 进行身份验证,方式与亚马逊AWS http://docs.amazonwebservices.com/AWSSimpleQueueService/2007-05-01/SQSDeveloperGuide/SummaryOfAuthentication.html可以。

我现在正在探索对传输中的数据进行加密的选项。 HTTPS 似乎是合理的选择,因为服务器端几乎不需要改变。然而,我的微控制器 http://www.luminarymicro.com/products/lm3s9b96.html具有相对较小的闪存 (256KB) 和 RAM (96KB),我能找到的唯一 HTTPS 客户端是商业产品。微控制器通过内置的“AES 加密查找表”使加密变得更简单,但我猜我需要一种安全的方式来交换密钥。

我研究过 SSL,它看起来相当复杂。还有其他更轻的选择吗?


SSL 的复杂性大部分来自于高度模块化。客户端可以支持多个“密码套件”,服务器选择一个。数据可以被压缩。客户端可以通过提供自己的证书并使用相应的私钥来验证自己的身份。服务器公钥作为 X.509 证书发送,X.509 证书验证很复杂。

您可以通过对客户端选择进行硬编码来大幅简化 SSL。例如,您决定仅支持一种密码套件,例如TLS_RSA_WITH_AES_128_CBC_SHA256。无压缩。您可以在客户端中硬编码服务器公钥,而忽略服务器发送的证书。如果可能的话,使用TLS 1.2 https://www.rfc-editor.org/rfc/rfc5246,这要求使用单个哈希函数 (SHA-256),而不是先前协议版本的两个哈希函数(MD5 和 SHA-1)(TLS 是 SSL 的标准名称;TLS 1.0 是 SSL 3.1)。

我(专业地)实现了一个 TLS 客户端,它支持 AES 和 3DES,并执行基本的 X.509 验证(仅限 RSA 签名)。完整的代码适合 21 KB 的 ROM(对于 ARM 处理器,用拇指指令编译的 C 代码),只需要 19 KB 的 RAM,其中 16 KB 用于输入缓冲区(输入记录的最大大小) SSL(假设没有压缩)大约为 16 KB)。所以SSLcan对于微控制器来说足够小。

一旦您通过预先选择客户端选择的参数来简化 SSL,您就会得到一个尽可能轻量级的协议:剩余的复杂性是固有的。如果你试图让一些东西变得更简单,那么你最终会得到一些更弱的东西。

对于现有的实现,至少PolarSSL http://polarssl.org/针对嵌入式设备,可在开源许可证 (GPLv2) 下使用。我不知道它能缩小到多小。还有CyaSSL http://www.yassl.com/,也可以根据 GPLv2 条款获得,并声称可编译成 30 KB 代码占用空间(具有最少的选项)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

轻量级加密密钥交换协议 的相关文章

  • Mechanize 出现 SSL 错误

    我得到了这些命令irb require mechanize agent Mechanize new agent get https monabo lemonde fr customer account forgotpassword 我收到这
  • 如何实现加密的共享偏好设置

    如何在我的 android java 应用程序中实现加密的共享首选项https developer android google cn reference androidx security crypto EncryptedSharedPr
  • 如何对加密算法进行逆向工程?

    我编写了一个以这种方式加密文本的应用程序 获取输入文本 反转文本 转换为十六进制 用密钥进行异或 Base64编码 现在 我自己没有做很多加密 编码 所以我的问题可能听起来很愚蠢 但是 假设我得到一个包含上述算法内容的文件 而我不知道这个算
  • 有没有一种简单的方法来加密java对象?

    我想将序列化对象存储到文件中 但我想对其进行加密 它不需要非常强的加密 我只是想要一些简单的东西 最好是最多几行代码 这会让其他人加载起来更加困难 我已经研究过 SealedObject 但关键是阻止我 理想情况下 我只想传递一个字符串作为
  • Java HTTPS客户端证书认证

    我对HTTPS SSL TLS我对客户在使用证书进行身份验证时到底应该提供什么内容感到有点困惑 我正在编写一个 Java 客户端 需要执行一个简单的操作POST数据到特定的URL 这部分工作正常 唯一的问题是它应该重新完成HTTPS The
  • RCurl 和自签名证书问题

    我在获取时遇到问题RCurl功能getURL访问使用自签名证书的服务器上的 HTTPS URL 我在 Mac OS X 10 9 2 上运行 R 3 0 2 我已阅读FAQ http www omegahat org RCurl FAQ h
  • 如何从一个端口为 Jetty 提供 https 和 http 服务?

    我知道这是一个重复的问题 但原始发帖者提出这个问题的原因是错误的 我并不是暗示我问它是为了right原因 但让我们看看 我们有一个在非标准端口号上运行的 Web 服务 尽管用户似乎能够记住端口号 但有时他们会错误地输入 http 而不是 h
  • 公钥的长度(加密)可以与私钥不同吗?

    我有一个 1024 位的私钥 并用它来生成公钥 这是否自动意味着我的公钥也具有 1024 加密 或者它的加密大小可以更小吗 512 256 PS 我最感兴趣并谈论的是 RSA 密钥中模数 n 的大小 大小通常为 1024 或 2048 位
  • P12 证书“数据不足”错误

    我试图使用安全地连接到端点 p12文件 但我不断收到以下错误 tls common js 136 c context loadPKCS12 pfx Error not enough data at Error native at Objec
  • 如果使用简单的异或密码需要申请CCATS吗?

    iTunesConnect 指出 如果在应用程序中使用加密 开发人员需要获得 CCATS 分类 我的应用程序在通过 HTTP 传输数据时使用简单的 XOR 混淆密码 这仍然符合该要求吗 如果不是 那么什么类型的加密需要进行 CCATS 分类
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能
  • Java 应用程序中 PKIX 路径构建失败

    将应用程序从 Windows 2000 迁移到 Windows 2008 R2 Server 后 我花了将近一周的时间才让我的应用程序正常运行 步骤 安装Java JDK 1 7 0 25 设置系统环境变量JAVA HOME to C Pr
  • 产生并处理软件中断

    有人可以告诉我如何在Linux下生成软件中断然后用request irq处理它吗 或者也许这是不可能的 您可以使用软中断来代替 您可以通过编辑 include linux interrupt h 来定义您的 sofirq 然后使用函数 ra
  • 忽略 Xamarin.Forms (PCL) 中的 SSL 证书错误

    有没有办法做类似这里描述的事情 https stackoverflow com a 2675183 https stackoverflow com a 2675183但在 Xamarin Forms PCL 应用程序中 我正在使用 Http
  • java.io.IOException:无效的密钥库格式

    有谁知道如何解决这个问题 我尝试了很多方法 但没有一个有效 当我单击更多详细信息时 我得到以下信息 at sun security provider JavaKeyStore engineLoad Unknown Source atsun
  • 如何将 AES CCM 与 Bouncycastle JCE 提供程序一起使用 - CCMParameters

    是否可以使用JCE来执行CCM 我在互联网上看到很多使用非 JCE bouncycastle 类的示例 特别是 我看到他们调用 init 并传入 CCMParameters 对象 问题是 这个 CCMParameters 对象不是从 Alg
  • 如何在.Net中使用SQLCipher

    我想用C winform 读取一个SQLCipher数据库并找到一个开源项目SQLitePCL https github com ericsink SQLitePCL raw 但是我还没有找到这个使用的例子 而且文档也不是很多 有朋友用过这
  • 无法查找 Websphere 8.5 中是否启用了 SSL

    我编写了一个简单的 ejb 瘦客户端来查找 IBM WebSphere 8 5 中部署的 bean 当服务器上未启用 SSL 时 我能够成功查找 bean 但是一旦启用 SSL 我就开始收到下面提到的异常 This is how I ena
  • “访问此资源所需的证书无效”

    XMLHttpRequest Network Error 0x800c0019 Security certificate required to access this resource is invalid 我已经找到解决方案了 首先 我
  • nginx - 记录 SSL 握手失败

    我正在运行启用了 SSL 的 nginx 服务器 我的协议 密码设置相当安全 我已经在 ssllabs com 上检查过它们 但是 因为这是一个由我无法控制的 http 客户端调用的 Web 服务 所以我担心兼容性 重点是 有没有办法在我的

随机推荐

  • 如何根据选择条件将节点集存储在变量中

    我有以下 XML 结构
  • 如何让 NSIS 安装并执行临时目录中的文件?

    我正在使用以下 NSIS 脚本 Name My app wrapper Outfile MyAppSetup exe InstallDir TEMP MyApp Install Function onInit SetSilent silen
  • angularJS如何避免重复http请求

    Angular 有没有办法避免重复 http 请求 正如您在上面的代码中看到的 我正在拨打电话以检索产品的详细信息 事实上 这个调用与一个按钮相关联 我会避免重复打电话 如果我点击了详细产品按钮 显然我不需要再次调用我的服务 正确的方法是加
  • 仅检查新添加的文件

    我使用 lint staged 和 husky 在提交之前对所有暂存文件运行 linter 但我的代码库很旧 所以暂时不想对现有 修改后的 文件运行 linter 有没有办法只针对新创建 添加 的文件运行 linter None
  • 如何为 SQL CLR 存储过程提供 sql_variant 参数?

    如何向 SQL CLR 存储过程添加 sql variant 参数 使用 System Object 不起作用 并且我没有看到任何可以使用的属性 Microsoft SqlServer Server SqlProcedure public
  • 如何使库与调用者脚本 PropertiesService 一起工作?

    直到谷歌将导入 导出 API 扩展到容器绑定的 Apps 脚本项目 https code google com p google apps script issues issues detail id 2922 我已将项目的大部分内容移至可
  • 设置 MKUserTrackingModeFollowWithHeading

    我尝试在 viewDidLoad 方法 和 viewWillAppear 中 设置用户跟踪模式 如果我将其设置为MKUserTrackingModeFollowWithHeading 值为2 则不会生效 实际上 在将其值设置为2后 如果我打
  • 在两个表中使用 OR 条件进行计算

    为了对蓝色产品或属于鞋子类别的产品的销售额求和 我使用以下 DAX 表达式 CALCULATE SUM Table SalesAmount FILTER Table Table Color Blue Table Category Shoes
  • 获取绑定到“value”属性的托管 bean 和类型

    假设我有以下结构 1 托管Bean ViewScoped ManagedBean public class TestBean private Test test getters setters 2 测试类 public class Test
  • Android Room 不接受通用字段类型

    我试图拥有一个基类 其中 id 字段属于通用类型 例如 class BaseEntity
  • 添加使用 javascript 选择的选项

    我希望这个 javascript 在 id mainSelect 的选择中创建 12 到 100 个选项 因为我不想手动创建所有选项标签 你能给我一些指点吗 谢谢 function selectOptionCreate var age 88
  • iOS13更改状态栏背景颜色

    在 iOS13 中 我无法再更改状态栏的背景颜色 因为无法再使用 键的值 访问状态栏 有人知道这是怎么可能的吗 或者是否知道这将在 iOS13 的最终版本中实现 我已经遇到了不同的建议 例如使用 UIApplications StatusB
  • 是否可以在 C++11 之前创建函数局部闭包?

    借助 C 11 我们获得了 lambda 并且可以在我们真正需要的地方 而不是在它们不真正属于的地方 即时创建函数 函子 闭包 在 C 98 03 中 创建函数局部函子 闭包的好方法如下 struct void operator int i
  • Firefox 中的 Html 5 日期选择器

    有什么方法可以设置在带有 HTML 5 的 firefox 版本 21 中启用日期选择器 我不想使用基于 jQuery 的日期选择器 因为将在使用该网站的浏览器中禁用 javascript 日期选择器在 Chrome 上运行良好 因此 如果
  • 删除命名管道.NET

    我使用以下代码列出我的命名管道 private IEnumerable
  • C++/SFML 显示故障,通过鼠标单击更改精灵成员

    我正在学习 C SFML 作为练习 我正在制作一个小程序 在窗口中显示 64x64 像素方形棕色精灵的 10x10 网格 该程序允许您使用键盘选择绿色 黄色 蓝色 灰色 棕色方形精灵 并用该选定的精灵替换所述网格上的任何图块 游戏循环如下
  • 无法将必备组件放在与我的应用程序相同的位置

    我使用 VS 2013 我希望 sql server 2012 express localdb 与我创建安装程序时的应用程序位于同一位置 因此 在项目属性 gt 发布 gt 先决条件中 我选择第二个选项 从与我的应用程序相同的位置下载先决条
  • 块局部变量的语法

    我对定义块局部变量的良好风格感到困惑 选择是 选择A method that calls block v w puts v w 选项B method that calls block v w puts v w 当我希望本地块具有默认值时 混
  • 分离 CodeIgniter 配置文件 Git 以便公开发布

    我即将启动一个基于 CodeIgniter 的项目 并计划使用 Git 作为我们的 DVCS 我将与其他一些开发人员合作 中央 原始 服务器是私人托管的 但我也想开源它 稍后将代码发布到Github 我的问题是 有没有办法在 Git 中分离
  • 轻量级加密密钥交换协议

    我有一个嵌入式系统通过 HTTP 将数据发布到 JSON REST 服务 我目前正在使用 HMAC SHA1 进行身份验证 方式与亚马逊AWS http docs amazonwebservices com AWSSimpleQueueSe