必威体育Betway必威体育官网
当前位置:首页 > IT技术

TEA加密算法与密钥管理

时间:2019-06-16 01:44:17来源:IT技术作者:seo实验室小编阅读:80次「手机版」
 

xys

TEA算法

TEA算法在腾讯QQ中大量使用。算法简单,容易实现,但是加密强度并不小,适合在嵌入式系统中使用。

TEA算法(Tiny Encryption Algorithm,小型加密算法)由剑桥大学计算机实验室的David Wheeler和Roger Needham于1994年发明。它是一种分组密码算法,其明文密文块为64比特,密钥长度为128比特。TEA算法利用不断增加的Delta(黄金分割率)值作为变化,使得每轮的加密是不同,该加密算法的迭代次数可以改变,建议的迭代次数为32轮。

TEA的结构类似于Feistel 密码结构,Feistel结构中一轮操作的左半部分与F函数输出是进行异或的运算(加解密流程相同);而TEA加密是进行+操作,解密时进行-操作(加解密流程不同)。说TEA是小型加密算法,其实是说其F函数比较简单,不像DES的F函数那么复杂,TEA的F函数只是进行简单的移位、加法、异或等操作,但是这不意味着TEA加密算法不安全。

TEA的一轮结构如下图:

在这里插入图片描述

#include <stdio.h>
#include <stdint.h>
 
//加密函数
void encrypt (uint32_t* v, uint32_t* k) {
    uint32_t v0=v[0], v1=v[1], sum=0, i;           /* set up */
    uint32_t delta=0x9e3779b9;                     /* a key schedule constant */
    uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];   /* cache key */
    for (i=0; i < 32; i++) {                       /* basic cycle start */
        sum += delta;
        v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
        v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
    }                                              /* end cycle */
    v[0]=v0; v[1]=v1;
}
//解密函数
void decrypt (uint32_t* v, uint32_t* k) {
    uint32_t v0=v[0], v1=v[1], sum=0xC6EF3720, i;  /* set up */
    uint32_t delta=0x9e3779b9;                     /* a key schedule constant */
    uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];   /* cache key */
    for (i=0; i<32; i++) {                         /* basic cycle start */
        v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
        v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
        sum -= delta;
    }                                              /* end cycle */
    v[0]=v0; v[1]=v1;
}
 
int main()
{
    uint32_t v[2]={1,2},k[4]={2,2,3,4};
    // v为要加密的数据是两个32位无符号整数
    // k为加密解密密钥,为4个32位无符号整数,即密钥长度为128位
    printf("加密前原始数据:%u %u\n",v[0],v[1]);
    encrypt(v, k);
    printf("加密后的数据:%u %u\n",v[0],v[1]);
    decrypt(v, k);
    printf("解密后的数据:%u %u\n",v[0],v[1]);
    return 0;
}

该算法中,被加密的数据是两个数字,密钥是4个无符号的32位整数(共128bit)。事实上,被加密的数据也可以是字符串,一个完整的例子如下:

TEA加密算法详解

https://jingyan.baidu.com/article/B2C186c829035dc46ef6ffd7.html

密钥的生成

密钥不能采用固定的密钥值,每个设备的密钥都不一样(每个设备的密钥本身也要是随机值,或者采用某种算法包装的不易被发现规律的值)。这样,即使加密算法被破解也无法破解数据,即使某个设备的密钥被拿到,其它设备的密钥也无法知道,依然无法破解其他设备的数据。

方法一:key = fun(设备ID+设备入网时间)

安全性分析:即使破解了TEA算法,还要再次破解密钥的算法。

方法二:key = fun(设备ID+设备入网时间+随机数)

备注:在设备出厂时自带一个唯一的随机数(不能用设备ID,因为ID有规律可循),入网时将该随机数告诉服务器,服务器将设备的随机数存储下来。(由于入网时间已经带有一定的随机性,可部分替代随机数,无需另外的随机数了)

安全性分析:TEA算法+密钥算法+随机数

fun函数可以使用md5算法,可以在单片机上实现。

MD5算法特点:

1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。

2、容易计算:从原数据计算出MD5值很容易。

3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

相关阅读

Android 补间动画之平移动画TranslateAnimation

Android动画系列 博客导航: 1.介绍: Android补间动画之平移动画,在实际的开发过程中,其实有好多地方需要用到平移动画,这是对于平

Android位移动画之——TranslateAnimation实现大师哥

一、背景Android中的动画效果是一个非常强大的功能,在使用过程中极大地提高的用户的视觉以及操作体验,Animations是一个实现Android

steam创意工坊打不开怎么办?

steam无法进入创意工坊的解决方法进入系统桌面后点击左下方的任务栏输入控制面板。点击进入网络与共享中心中。在这里新建一个宽

程序员面试【Brainteasers】

偶然间在网上看到几个原来没见过的面试智力题,有几个题目在国内流传相当广,什么n个人怎么分饼最公平,屋里的三个灯泡分别由哪个开关

[VSTS] 从零开始 Team Foundation Server 2010 安装配

转自 : http://www.cnblogs.com/WilsonWu/archive/2011/11/24/2261674.html近期公司要配TFS用于新项目的管理,公司也将逐步迁移至

分享到:

栏目导航

推荐阅读

热门阅读