基于Java点对点通信技术的DES密钥交换

时间:2022-09-01 02:59:02

基于Java点对点通信技术的DES密钥交换

摘 要: 介绍了使用Java的点对点通信技术,基于Diffie-Hellman规则,给出了IBM des密钥交换的总体方案、算法和应用程序,详细说明了其中涉及的主要技术和方法,同时给出了在PC机上用二进制指数分解法实现大数模运算的算法分析和实现方案。

关键词: 密钥交换; java; DES; Diffie-Hellman

中图分类号:TP301.6;311.11 文献标志码:A 文章编号:1006-8228(2012)11-23-03

Interchange of DES cipher key based on Java p2p communication technology

Wang Zhida

(Ningbo Polytechnic, Ningbo, Zhejiang 315800, China)

Abstract: The scheme, module, and application program of IBM DES cipher key interchange by Diffie-Hellman rules based on Java P2P communication technology are introduced. The related techniques and methods in detail are explained. The module analysis and the implementation scheme of calculating large figure modulus on PC with binary index decomposing method are given.

Key words: cipher key interchange; Java; DES; Diffie-Hellman

0 引言

在IBM DES加密传输应用中,如果是首次通信或密钥已过期,则需要进行Diffie-Hellman密钥交换[6]。本文使用Java的点对点通信技术和二进制指数分解法[1]设计Diffie-Hellman密钥交换应用程序,如图1、图2所示。

图1 密钥交换服务端

图2 密钥交换客户端

密钥交换双方运行各自的程序,一方以客户机方式连接另一方(服务端),设定任意的初始值(Diffie-Hellman运算指数),系统计算并交换密钥种子,生成初始密钥,经DES系数和DES模数处理后得到DES密钥。

1 算法

1.1 算法概要

密钥交换过程如图3所示。

[设定

初始值m][密钥

k=f2(N,m)][

密钥

交换

程序

][公共通信网络] [

密钥

交换

程序

] [密钥种子

M=f1(m)][接收N] [设定

初始值n][密钥

k'=f2(M,n)][密钥种子

N=f1(n)][接收M]

图3 密钥交换过程

程序预设两个Diffie-Hellman运算基数p和q(大于80位二进制),程序运行时,交换双方分别设定运算指数m/n(大于20位二进制),程序用Diffie-Hellman算法[5]计算密钥种子:

M=pm mod q

N=pn mod q

程序交换M/N后,计算密钥:

k=Nm mod q

k'=Mn mod q

根据模运算的性质:

(pn mod q)m mod q=pnm mod q=pmn mod q=(pm mod q)n mod q

所以:

k=k'

1.2 算法设计

由于pm、pn以及Nm、Mn这样的大数,已远远超出了现有计算机处理数据的范围,本文用二进制指数分解法进行计算,概括如下(设要计算PD mod Q):

将D转换成二进制数B(设为bnbn-1…b1b0),各位从右到左依次存入bi(i=0,1,2,...,n,bi=0或1),得到D的分解式:

bn×2n+bn-1×2n-1+......+b1×21+b0×20

式中各项从右到左依次存入di(i=0,1,2,...,n),得到PD的分解式:

按照模运算的规律,若数列(x=0,1,2,...,n)中大于Q的最小元素是(0≤t≤n),且 mod Q=T,则:

mod Q

等价于

mod Q

在程序中可使用循环,逐步减小PD分解式中指数较大的项,同时,利用模运算的如下性质[3]:

(X*Y*Z) mod Q=(((X*Y) mod Q)*Z) mod Q

得到算式PD mod Q中PD的可计算等价数(设为A),然后计算A mod Q的结果。

1.3 算法实现

按照上述算法,用Java实现如下:

import java.io.*;

public class clfm

{ public static void main(String args[]) throws Exception

{ long p=2000000001,d=9223372036854775807L,

q=2147483647,t,result,temp;

int i,j,k,n;

long data[][]=new long[200][2];

上一篇:酷·品 第11期 下一篇:中医方剂与图集的转换方法