嵌入式系统的对称加密算法

问题描述 投票:11回答:4

寻找用于在C中加密字节数组的建议和一些参考代码。问题是我必须与其他例程一起装入1KByte内存,MCU仅为8MHz。因此,大小和速度是关键。我已经检查了Rijndael,但它具有适用于我的MCU的庞大表。基本上,我将在PC上加密intel hex格式,可能只在数据区域加密,然后在MCU中解密。

不希望使用动态内存分配例程。

我的Google搜索使用库将我带到了C#实现中。

更新:

解密方约束:

RAM: 512 byte
MAX code size: 512-1024 words
CPU: 8 bit, 8MHz
c encryption cryptography embedded avr
4个回答
14
投票

我看到在嵌入式世界中使用的一种非常简单的加密算法是XXTEA


4
投票

Rijndael中的所有表在GF2中均定义为简单操作。因此,我很想说有可能写例如。 1k中的128位AES。

另请参见:https://electronics.stackexchange.com/questions/13275/smallest-aes-implementation-for-microcontrollers

但是任何选择的算法在安全性上都是次要因素,例如如果密钥与二进制文件一起分发。在这种情况下,公开原始二进制文件的最简单机制是通过仿真器运行代码并存储内存。


0
投票

看看我命名为Simple Tea的XTEA的简化版本:

Simple Tea

在AVR上产生<250字节的操作码(这里的#include <avr/io.h> #include "simple_tea.h" uint8_t secret_data[] = {0xFE, 0x67}; SimpleTEA<sizeof(secret_data) / 2> tea; int main() { unsigned int rounds{16}; uint8_t key[] = {0x45, 0x74, 0x32, 0x11, 0x98, 0x94, 0xAB, 0xCF, 0x90, 0xAE, 0xBA, 0xDC, 0x06, 0x16, 0x81, 0x95}; secret_data[0] = PINB; tea.encrypt(rounds, secret_data, key); if (secret_data[0] & (PINB)) { PORTC = 0x05; } secret_data[1] = PINB & (1 << 2); tea.decrypt(rounds, secret_data, key); if (secret_data[0] & (PINB)) { PORTC = 0x50; } } 仅在避免编译器完全优化ifencrypt时才需要:]

decrypt

-1
投票

我已经读到椭圆曲线加密(ECC)是旨在将强大的加密技术引入小型处理器的新事物。

[的Google:椭圆曲线密码微控制器在列表顶部产生有关8位微控制器的实现的讨论。

但也许考虑迁移到Stack Exchange。例如,这可能很有用:

➜ Encryption git:(master) ✗ avr-gcc -std=c++17 -Os -mmcu=atmega328p main.cpp -o main ➜ Encryption git:(master) ✗ avr-size main text data bss dec hex filename 214 2 1 217 d9 main ➜ Encryption git:(master) ✗ avr-nm --size-sort -C -r --radix=d main 00000044 T main 00000022 T __do_copy_data 00000016 T __do_clear_bss 00000002 D secret_data 00000001 B tea

© www.soinside.com 2019 - 2024. All rights reserved.