基本需求:
1. 使用C 编程
2. 要有socket编程
3. C/S模式
4. 能在linux ubuntu 18.04上运行
5. 一个基于线程池的多线程服务器
6. 可供多个客户端连接
7. 最多只能有4个安全容器Enclave(也称飞地)
8. 要实现客户端和服务端代码
9. 端对端通信
10. 要能支持SGX硬件
技术细节:
1. 使用基于线程池的多线程服务端
2. 客户端和服务端连接时要进行remote attestation认证
3. 认证完后要用使用DHKE交换被RSA签名过的公钥(公钥在下一条解释)
4. 在进行密钥交换之后,使用AES加密服务器和客户端之间的信息交流,AES使用的公钥由上面的DHKE交换由服务器分发给客户端
5. 以上提及的AES、DHKE、RSA都要能兼容使用大素数(long long int)
6. Attestation,RSA相关计算,AES相关计算都要在Enclave中进行
7. 服务器和客户端的信息交换(即完成密钥交换之后的通信过程)可以只支持任意的字符串发送
8. 客户端或服务器主动断开通信时要能清除其相关内存的内容。
9. 能顺利运行知道通信结束。
大致流程:
1. 服务端开启,客户端通过socket进行连接。
2. 客户端连接成功后,服务端通过向线程池加入一个任务(或创建一个线程),向另外一个服务端(也需要搭建,以下称为SP服务器)进行remote attestation 获取身份验证码,其中涉及的计算要在Enclave中进行且使用的是SGX中SDK的API,向客户端证明自己是经过intel SGX认证的安全容器Enclave,且本点提到的内容除加入任务外都是线程池任务的内容
3. 通过远程认证过程后,开始密钥交换DHKE,交换内容由RSA加密,其中涉及的计算要在有限数量的Enclave中进行,不能创建新的Enclave,且本点提到的内容都是线程池任务的内容
4. 通过密钥交换DHKE后,服务端和客户端正式开始通信,通信内容由AES作为加解密算法,且本点提到关于AES的内容都是线程池任务的内容
5. 在客户端输入结束信号后,客户端通信完成,服务端提示客户端已断开连接,清除掉与该客户端通信留下的信息且不影响其他正在通信的线程。
6. 以上提及的SP服务端、服务端、客户端都要完成
7. 以上内容都由C \C编写
8. 以上提到的关于服务端与客户端的通信的内容都基于C socket
9. 基于以上内容完成的程序要可以在支持SGX 硬件的以linux ubuntu 18.04为系统的机器上运行