APP下载

基于C#的计算机网络加密技术实验案例研究

2020-02-03王磊杨青文张立立

电子技术与软件工程 2020年19期
关键词:加解密客户机私钥

王磊 杨青文 张立立

(东北大学计算机科学与工程学院 辽宁省沈阳市 110819)

学习使用Visual Studio 等开发工具,掌握基于Socket 的TCP通信以及常用的加密算法,熟悉应用软件的开发过程。

要求学生使用C#等语言以及相关的开发工具,进行一次网络通信软件的开发,要求具有信息加密功能以及密钥管理功能。要求软件界面美观,操作简便,符合网络通信的实际场景。

基于以上基本教学要求,本文给出了一种基于加密聊天软件的设计方案,基于AES 算法对聊天内容进行加密,并通过RSA 算法进行密钥分发,基于TCP 协议的Scoket 编程实现聊天信息的传输。

1 系统需求及总体设计

1.1 系统需求分析

为满足需求,软件应具有基本的聊天功能和数据加密功能。

基本聊天功能:用户可以设定昵称,在连接服务器以后,可以看到其他在线用户,可以选择群聊和私聊两种聊天方式进行聊天。

数据加密功能:能够在发送端对聊天内容进行加密,在接收端进行解密,为确保安全,每次登录服务器后可以随机生成新的密钥,并且密钥可以通过一种安全的方式在用户之间传递。

另外,软件应具有简洁、美观的操作界面;系统可自行完成复杂的加密、解密过程,无需用户进行繁杂的操作;软件响应时间不超过5 秒。

1.2 系统总体设计

系统包括服务器端和客户机端两个部分,客户机通过与服务器连接实现相互通信。系统总体包括三个部分:网络通信、聊天信息加密、密钥分发。

图1:Socket 通信流程

图2:AES 加解密过程

图3:RSA 算法加解密过程

图4:服务器端界面

图5:客户机端完整界面

1.2.1 网络通信

如图1所示,在网络通信部分,采用基于Socket 套接字的TCP 通信,主要流程如下:

(1)首先在服务器端创建一个套接字,通过bind()函数绑定在一个本地地址和端口上;

(2)服务器启动listen()函数持续进行监听;

(3)客户端同样创建一个套接字,然后通过connect()函数向服务器发起连接请求;

(4)服务器监听到客户端的连接请求后,调用accept()函数接收请求,建立连接,同时为客户机创建一个新的套接字进行通信;

(5)建立连接后,双方可以通过read(),write()等函数进行数据的传输;

(6)服务结束时,客户端调用close()函数关闭套接字,服务器继续进行监听,直至调用close()关闭服务。

1.2.2 聊天信息加密

聊天信息采用AES 加密算法进行加密。AES 是一种对称加密算法,即加密和解密使用相同的密钥。AES 是一种加密标准,其包括多种模式,如ECB、CBC、CFB、OFB,等。其中,CBC(Cipher Block Chaining,密码分组链接)模式采用循环的方式,将前一个分组的密文和当前分组的明文异或操作后再加密,增强了破解难度。本文采用256 位AES 标准的CBC 模式进行聊天信息的加密,共加密14 轮,每一轮的主要流程包括轮密钥加、字节代换、行移位和列混合操作。

图2 为AES 加解密的流程,其中W 代表扩展后的密钥,为一个字节矩阵。

在执行每一轮操作前,需要将明文转换为状态矩阵,即将明文按AES 标准的字节大小进行分组,然后将其用以字节为单位的正方形矩阵描述。下面简单介绍一下每一轮加密中的四个操作。

字节代换:一个简单的查表操作,将状态矩阵中的元素按照一定规则映射为AES 定义的S 盒中的值。

行移位:将状态矩阵中的值进行左循环移位操作,第一行不进行移位,第二行向左移一位,以此类推。

列混合:将移位后的状态矩阵与固定的矩阵相乘,得到混淆的状态矩阵,其中,乘法和加法都是定义在基于GF(2^8)上的二元运算。在最后一轮操作时不进行列混合。轮密钥加:将密钥同状态矩阵中的数据进行逐位异或操作。AES 的解密过程即加密过程的反操作,如图2所示。

1.2.3 密钥分发

密钥分发采用RSA 加密算法。RSA 是一种非对称加密算法,即加解密使用的密钥是不同的。这种加密方式是用数学上的难解问题构造的,通常加密解密的速度比较慢,适合偶尔发送数据的场合。其优点是密钥传输方便,而且可以用于传递AES 的密钥。

RSA 算法采用一对公钥和私钥进行加解密,如图3所示。假设发送方向接收方发送消息(明文),加解密基本步骤如下:

(1)接收方生成公钥和私钥,公钥公开,私钥保留;

(2)发送方将要发送的消息采用公钥加密,得到密文,然后将密文发送给接收方;

(3)接收方收到密文后,用自己的私钥进行解密,获得明文。

本文设计的加密聊天软件使用AES算法对聊天信息进行加密,用户每次聊天时都会随机生成32 位数字的AES 密钥。如果某个用户甲想要向用户乙发消息,首先甲需要再本地生成一对RSA 公钥和私钥,然后将公钥传给乙;乙用甲的公钥将自己的AES 密钥加密后再传回用户甲;甲用自己的私钥进行解密,获得乙的AES 密钥,即可向乙发送加密消息。同样地,如果乙想要向甲发送消息,也要执行一样的操作。

图6:用户连接到服务器

图7:群聊方式下获取密钥

图8:私聊方式下加密聊天

为解决操作繁琐的问题,使系统自动完成密钥传递和加解密功能,对聊天信息添加标识符,使系统可以自动识别不同的消息并进行相应的处理。使用的标识符包括“PUKEY”,“PRKEY”,“PU-CIPHER”,“PR-CIPHER”,分别代表群聊公钥、私聊公钥、群聊密钥和私聊密钥。在收到公钥消息后,系统会使用该公钥对本地AES 密钥进行加密,并将其返回;密钥消息传输的是加密后的密钥,在收到此类后,系统使用本地私钥对其进行解密,并使用得到的密钥进行AES 加密通信。

2 系统详细设计及方案

下面对服务器端和客户机端各个模块的具体设计方案进行详细描述。

2.1 服务器端

服务器端界面设计相对简单,只需显示端口号、在线用户、群聊密钥。服务器可以选择一个端口号启动,在启动以后,会随机生成AES 密钥,用于用户之间群聊。当有用户连接到服务器时,服务器会进行记录,并实时显示在线用户,如图4所示。

2.2 客户机端

客户机端是用户进行聊天操作的界面,包括用户信息、在线用户列表、聊天记录、信息发送模块,以及密钥管理模块和信息加解密模块。

用户信息模块是用户连接服务器的功能模块,需要输入的信息包括用户昵称、服务器的IP 地址和端口号。

连接服务器以后,从服务器获取在线用户列表。用户可以选择群聊或私聊,当选择群聊时,可以从服务器获取群聊密钥;当选择私聊时,可以从在线用户列表中选择一名用户,交换聊天密钥,向对方发送加密消息。

为展示出聊天内容加密以及密钥管理的过程,将聊天密钥以及密钥管理模块一并显示在界面中(实际应用场景下,用户并不需要知道加解密和密钥管理的工作过程)。不管是群聊还是私聊,都需要先获取聊天密钥。如果是群聊,密钥由服务器随机升成,并通过RSA 公钥加密后发给用户;如果是私聊,每个人的加密密钥均不同,因此需要获取对方的密钥,同样采用RSA 算法进行密钥的加密与分发。当获取密钥时,RSA 算法生成的公钥和私钥将显示在密钥管理模块中,聊天使用的AES 密钥将显示在信息加解密模块中。

用户在获取密钥时,无需知道密钥是如何生成以及如何进行分发的;在获取密钥之后,直接输入文本消息发送即可,也无需知道对信息进行加解密的过程,整个过程均由系统自动完成。客户机端的完整界面如图5所示。

3 系统测试

系统开发使用的软件为Visual Stuio 2015,使用语言为C#。系统测试项目包括:服务器启动和用户登录,群聊模式下密钥的生成与分发,群聊模式下聊天信息的加密传输,私聊模式下密钥的生成与分发,私聊模式下聊天信息的加密传输。

以下是测试过程及结果:

(1)用户登录及服务器启动,如图6所示。

输入端口号后点击确定启动服务器,然后打开客户机,输入信息后连接服务器,服务器上和客户机上均可动态显示在线用户。

(2)群聊模式。

用户选择聊天方式为“群聊”,点击“一键获取密钥”按钮,密钥管理模块生成公钥和私钥,服务器端生成32 位数字密钥,同时客户机端“群聊密钥”处显示出从服务器获取的密钥,弹出“收到密钥”窗口。如图7 为群聊方式下获取密钥界面。

输入聊天内容并点击发送,群聊的所有用户均可收到消息,右下角的密文框中显示的是收到的密文,聊天记录中显示的是解密后的消息。说明已成功进行了消息的传输和加解密。

(3)私聊模式。

选择“私聊”模式,选择一个用户进行私聊,点击“一键获取密钥”按钮后,显示“收到密钥”,显示的密钥与该用户的密钥一致。如图8所示为私聊方式下加密聊天。

同时,在对方的密钥管理模块,可以看到“对方公钥”处获取到加密AES 密钥的公钥。在互相获取密钥后,两个用户分别相对方发送消息,双方均可以收到密文并将其解密显示在聊天记录中。

4 结束语

本文给出了使用RSA 进行密钥管理的AES 加密聊天软件的设计方案,详细介绍了系统各部分的功能原理、运行流程以及具体的实现方案,最后对系统各个功能进行测试。本设计重在基础教学,巩固学生对理论知识的理解,锻炼软件开发的能力,提高其系统设计能力与逻辑思维能力。

猜你喜欢

加解密客户机私钥
清扫机器人避障系统区块链私钥分片存储方法
比特币的安全性到底有多高
基于改进ECC 算法的网络信息私钥变换优化方法
一种基于虚拟私钥的OpenSSL与CSP交互方案
PDF中隐私数据的保护方法
电子取证中常见数据加解密理论与方法研究
基于FPGA的LFSR异步加解密系统
瘦客户机:安全与便捷的选择
升腾瘦客户机借神码翱翔“云端”
基于Web数据提高访问速度的方法