DECE算法基本原理
在发送端,把输入内容按数据位排列成矩阵,按照协商的方式和密钥形成一个列加密矩阵、行加密矩阵和加扰矩阵。用列加密矩阵对输入数据的列进行数据位交换,用行加密矩阵对输入数据的行进行数据位交换,用加扰矩阵对数据块按字节进行异或操作,从而达到加密的目的。在接收端,使用同样三个矩阵的逆矩阵顺序进行去扰、行恢复和列恢复,还原出原始数据。在整个加解密过程中,仅仅使用数据位交换和异或操作,这种加密方法命名为。

DECE为了计算简单而且保证输入输出的数据长度完全一样,加密分组使用8×N列矩阵,这样,每个字节对应于矩阵的一列,顺序排列形成矩阵。使用密钥交换算法产生一个属于通讯双方共有的6个私有数值,三个作为密钥,与公共密钥一起计算三个HASH数字签名;剩余三个作为矩阵生成偏移量;把数字签名根据矩阵生成偏移量进行循环移位,生成列交换矩阵、行交换矩阵和加扰矩阵。

DECE加密矩阵生成方式很多,选用8×32列共计128位的加密矩阵;采用DH算法完成密钥交换,并选择密钥和矩阵生成偏移量的DH特征值长度分别为160位和16位;选择MD5产生HASH数字签名,数字签名长度为128位。

DH交换DH
交换的目的在于以明文的方式交换密钥特征,形成只有参与通讯双方才知道而且通讯双方一定知道的私有数值。

确定一个模数(如p)以及底数(如g),两个通讯设备(如MA、MB)各随即选取一个加密指数(如a和b),以明文方式报告自己的DH特征值(如A和B),然后各自进行乘幂计算以产生这个私有数值:
MA把计算结果(特征值)A=ga%p发送给MB;
MB把计算结果B=gb%p发送给MA;
这样,两个通讯设备可以同时计算出属于这个通讯链路的私有数值:
O=Ba%p=ga*b%  p=Ab%p。

通讯双方选择的加密指数是不公开的,应该相对较大,而且应该通过某种随即算法保证这个加密指数是变化的。其次,通讯双方每隔一定时间,应该申请更改私有密钥,以避免黑客获得太多的数据样本并破译通讯内容。针对基本原理中提到的各个特征数据的长度,用于生成密钥的加密指数至少应该达到12位,用于生成偏移量的加密指数建议选择8位,这样,六个加密指数的选择空间总和至少达到60位。在通过信令完成RTP参数交换以后,双方各自在第一时刻发起DH交换请求,而且任何一方收到DH交换请求以后,立即向用户发送自己的DH特征值,从而建立起这个加密信道。

设备产生的加密指数是随机的、变化的,而且6个加密指数之间没有任何的联系。事实上,设备根本不能产生随机数,当程序运行到某一条指令的时候,时钟是一个固定值,随机算法的种子是一个固定值,甚至各个寄存器也是一个固定值,用随机算法产生的下一个数据也是固定值。在程序启动的时候以及运行过程中,最好读一段随机网路数据,以这些数据进行运算和组合,形成加密指数。