技术标签: 密码学
会议创建:首先会有一个会议创始人即会议主持人,在会议创建时候,创始人会自定义会议的密码,以及输入参会人员的用户名,这些用户名也就是将要加入会议人员的名单。
数据库初始化:服务器会在它的数据库中存储这些用户名,存储时是采用加密存储的模式,数据库中的数据都是采用AES-192的算法加密。
用户入会:
当用户要进入会议时候,首先需要的是输入会议密码参会,验证通过方可进入会议。
当用户进入会议后,接着要求输入用户名,此时服务器会从数据库保存的加密过的用户名与之比较,这个过程是先对数据库中的数据解密,然后得到明文用户名之后再与这个用户名去比较。
如果说用户名在该会议名单中,那么服务器在数据库中为这个用户名加一个“在会”的标志,如果说用户名不在该会议名单中,那么该用户就是非法用户,不会得到服务器的认可,因此,服务器也会把这个不被授权的用户加密保存在一个不被信任的用户数据库表中。
用户匿名:进入会议后,此时各用户之间显示的是也将是加密过后的用户名,这样也就实现了一个用户间匿名的过程。这个过程采用的加密算法是SHA-256,即做一次Hash值显示出来。
密钥生成:服务器作为CA机构,为各个用户提供公私钥对。其中生成公私钥对的算法可以由RSA的随机大素数分解生成。
密钥协商:用户本地会自动通过随机算法生成公私钥对S1,P1,然后把相应的公钥P1以及自己的用户名ID发送给服务器,服务器先去核验用户名是否正确,如果是合法用户,则把自己的公钥P0发送给用户,之后用户本地自定义一个密钥key,通过服务器的公钥P0加密,然后发送出去,服务器则用自己的私钥S0解密信息,获得key。但是如果是非法用户,则服务器不做出任何会应。
这样就完成了一次密钥协商的过程,之后的通信就是通过key加密传输。
用户之间身份验证:用户之间的身份认证是通过服务器为中介,用户发送自己的IDA以及要去认证的对方的IDB,以及自己的Cert(A)到服务器,服务器作为CA机构先去认证A的身份,通过A的证书Cert来查验,验证通过之后,服务器就去为用户A查验用户B的身份,查验的过程是先对数据库中的用户名数据解密,然后分别调用匿名使用的Hash函数,此时的结果去与待查验的IDB 去比较,如果通过,则说明用户B是合法认证用户,此时服务器向用户A返回认证通过的信息,以及将用户B的明文用户名发送给用户A。否则,若验证不通过则返回不合法用户的信息,提示用户B是未通过认证的用户。
广播数据:在会议中实现的是数据的广播,若用户A要发送信息M,则将用户A的信息、该信息M、用户A的证书发送到服务器。服务器收到数据后,将先去验证用户A的身份,验证通过后,要把消息M广播出去。此时,服务器就会调用它的受信任用户名表,用这些用户对应的公钥加密消息M,然后分别向他们发送C(M)。各用户收到数据后,用自己的私钥去解密数据,得到消息M。该过程由于敌手不在受信任用户表中,因此,服务器不会把消息发送给敌手。
基本目标:两方参会
两个用户进入会议,此时通过上述工作流程的介绍是很容易实现的,且实现的效率也很高。
高级目标:多方参会
当有多个用户进入会议,此时工作模式如上所述,只是会议发起人要在创建会议的时候确定好会议名单。多个用户的访问,只是于服务器而言多了几次的认证,交互的过程。
基本目标:
1、 提供端到端的保密性,只有授权用户可以访问会议音视频数据。
鉴于是会议的模式,因此设计采用的是对一个数据包由服务器去向受信任用户广播的方式,但是这个广播其实也是点对点的加密连接的过程,各个用户之间分别是与服务器用对应的公钥加密内容传输的。
这个过程中哪些用户可以访问到数据其实是服务器控制的,服务器是对受信任的用户去一一建立连接,而不被信任的用户是完全无法收到这个信息的,也就是说只有授权的用户才可以访问到会议的音视频数据,这样也就实现了端到端的保密性。
2、 提供参会用户的身份互认证
用户之间的身份的互认证是通过服务器为桥梁实现的,每个用户都有自己在入会时候输入的真实用户名,用户之间显示的时候显示的是加密后的用户名。认证通过时,会将真实的用户名反馈给认证发起人。
首先认真发起人会将自己的ID、Cert以及待认证的ID发送给服务器,服务器会与自己数据库中的用户名列表对比,完成对该用户的认证以及对待认证用户的认证。将认证的信息一并反馈给认证发起人。这样也实现了用户之间的身份互认证的过程。
高级目标:
3、 参会用户身份的匿名性,即除授权的参会用户外,敌手(包括视频会议服务提供 商)无法确认参会者身份。
参会者身份的匿名性是通过一此Hash变化实现的。因为Hash的单向性,用户之间直接看到的其实是真实用户名的Hash值,其他用户无法通过这个值去推断该用户的身份,因此这样就可以实现用户身份的匿名性。
授权的用户是可以确认参会者身份的,也就是基本目标中的身份互认证的过程。
敌手是无法确认参会者身份的,因为服务器没有为敌手发放公私钥,此时它无法向服务器发起认证其他用户身份的请求。即使他伪造了公钥、私钥,证书,这些都没有在服务器端保存,因此当服务器去验证认证发起人的身份的时候就必然是失败的,因此敌手无法确认参会者身份。
1、 服务器压力过大
通过上述的介绍我们也可以清楚,服务器的工作量确实有些大,因此,为了减轻服务器的工作压力,想到的解决办法是通过多台服务器共同处理数据,也就是分布式处理,将计算量分散开来,可以得到较好的效果。
2、 频繁访问数据库表,频繁解密
在这个认证、传输的过程中都要很频繁地去访问受信任的用户表,又因为整个数据库都是加密存储的,这样解密也本身就需要一定的时间。
因此,可以考虑在会议进行时,为用户表做一个高速缓存,整个高速缓存是明文的,也是保存在堆中的,可以大大提高服务器的访问速度。
3、 数据库密钥泄露问题
因为整个数据库是加密存储的,因此,必然会有AES的密钥需要保存。
面对的一个问题是可能有内部开发人员或者基础设施的维护人员知悉密钥后泄露密钥。
为了解决整个问题,考虑采用多层次的、多级的密钥保护。对一个密钥s,由管理者A、管理者B、管理者C……依次加密。
这样的好处是如果说一个管理者X对外泄露了自己的加密密钥,或者当前状态的密钥k,但是由于是采用的多级加密的模式,密钥s的安全性依旧是可以得到较好的保证。
4、 流量被敌手拦截、修改
在数据传输的过程中,实现的均是公钥方法的加密传输,因此即使流量被拦截,也无法知悉流量明文内容。
因为公钥传输的不仅仅是明文M,还有发送者的数字签名,敌手修改的时候只可能修改到公钥数据,但是签名是无法修改的,接收者验证签名不符合就可以判断该数据被篡改了。通过签名实现的是消息的完整性。
5、 可以进入的非法会议者扰乱会议秩序
虽然说在入会之前是通过入会密码来限制的,但是为了防止敌手破解了入会密码成功进入会议,继而扰乱会议的情况,本设计中采用了对入会者身份的一一认证跟踪。
服务器是完全知道哪些入会者是合法用户,哪些入会者是不法用户。设计实现了不法用户是在会议中无法接收到任何相关信息,也无法向其他参会人员发送任何参会信息的效果。因此,可以进入会议的非法用户是无权扰乱会议秩序的。
**pyqt5Designer制作好界面后无法显示以及显示与Designer端不同的解决方案**之前因为这个问题找了很多文章,大多数是在文件末尾加上下面一段代码if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) widget = QtWidgets.QWidget() ui = Ui_MainWindow() ui.setupUi(widget) wi_pyqt5 显示布局 不同
JS面试题:【点击这里领取面试题资料】1.javascript的typeof返回哪些数据类型string, boolean,number, undefined, function,object2.例举3种强制类型转换和2种隐式类型转换?强制(parseInt, parseFloat, number) 隐式(== === + -)3.split() 和 join() 的区别split()是将字符串切割成数组的形式,join()是将数组转换成字符串。4.数组方法pop()、push()、un
给出一部分常用的 LoadRunner 函数,供大家参考。LR 函数:lr_start_transaction 为性能分析标记事务的开始lr_end_transaction 为性能分析标记事务的结束lr_rendezvous 在 Vuser 脚本中设置集合点lr_think_time 暂停 Vuser 脚本中命令之间的执行lr_end_sub_transaction 标记子事务的结束以便进行性能..._写出5个loadrunner中常用函数,并对其中2个举例说明用法。
1.首先看下面一段代码dispatch_queue_t queue = dispatch_queue_create("abc", DISPATCH_QUEUE_SERIAL);dispatch_sync(queue, ^{//taskA//do somethingdispatch_sync(queue, ^{//taskB //啥也干不了});复制代码});dispatch..._dispatch_sync 主线程
Centos7 ZABBIX3.0安装已亲自试验安装成功,可以参考!以下操作均与root用户操作,如子帐号请加sudo执行!1.官方文档地址:https://www.zabbix.com/documentation/3.0/manual/installation/install_from_packages2.导入源:[zabbix@root ~]$ rpm -ivh ...
前端开发中,涉及服务器的地方一般都交给后端处理,这样有时候很不方便,所以,自己来上传服务器是非常爽的啦工具: Xshell6传送门:http://www.netsarang.com/products/main.htmlPS:前端代码在放到服务器(一般是测试服)之前,要build一下,一般代码push到分支上,在Xshell上pull下来,就可以在测试服上正常是用来啦。正式服同理步骤一: Xshe..._xhell6是什么
看到一个面经,讲到了目标检测的模型融合,很有帮助,在此记录一下思想:https://zhuanlan.zhihu.com/p/59270912神仙打架,一面竟然问了40多个问题,惊呆惊呆!!!=================================================目标检测当中的模型融合主要就是在刷榜的时候有用,在实际工业界并没有实际的用处,因为模型融合之后..._目标检测结果融合
说明:开发环境 vs2012 asp.net mvc4 c#利用Aspose.Cells 获取Excel数据表的sheet的名称,并把获取的名称赋值给easyUI 的combobox1、运行效果2、项目结构Couse.xlsx数据表的sheet如下图所示3、HTML前端代码Easyui Combotree 测试$(function () {$('#dd').combobox({url: 'Home..._aspose获取sheet
ThingsBoard教程(三二):登录功能源码解读ThingsBoard教程(三一):ThingsBoard 仪表盘详解ThingsBoard教程(三十):物联网平台ThingsBoard源码讲解ThingsBoard教程(二九):详细讲解在tb平台下 http协议下的客户端rpc,服务的rpc的使用ThingsBoard教程(二八):详细讲解在tb平台下 mqtt协议下的 rpc 遥测,客户端rpc,服务的rpc的使用 ,与node-red联动。_thingsboard教程
估计很少人知道HTML5 APIS里有一个window.postMessage API。window.postMessage的功能是允许程序员跨域在两个窗口/frames间 和 主线程与web worker线程间发送数据信息。基本上,它就像是跨域的AJAX,但不是浏览器跟服务器之间交互,而是在两个客户端之间通信。让我们来看一下window.postMessage是如何工作的。除了IE6、IE7之外..._html5 postmessage
CISCO路由器部分设备不能通过DHCP自动获取IP的原因是dchp地址池缓存或者冲突池满了手动清空地址池缓存和冲突池clear ip dhcp binding *clear ip dhcp conflict *_思科模拟器dhcp获取失败