首页 > 编程语言 >COMP3334 端到端加密聊天web应用程序

COMP3334 端到端加密聊天web应用程序

时间:2024-04-09 12:22:19浏览次数:28  
标签:web 加密 COMP3334 用户 MAC 消息 聊天 端到 密钥

端到端加密聊天web应用程序2023/2024年第2学期如今,web服务是最重要的用户的常见应用程序形式暴露于。Web浏览器成为计算机上的流行应用程序使用户能够访问这些web服务。确保web服务的安全是对互联网至关重要。此外,隐私的一个重要特征现代。您的工作是实现端到端加密聊天web应用程序以及保护网站的各个方面。
概述
目标
1.调整一个基本的聊天网络应用程序,使其成为一个安全的E2EE聊天网络应用2.符合NIST特别出版物800-63B“数字”中的一些要求身份指南——身份验证和生命周期理”,适用于美国联邦机构(这也是其他类型系统的参考)
3.实现基于密码和OTP(或FIDO2)的安全MFA机制4.加密两个用户之间的通信,使服务器不知道消息的内容(E2E加密)
5.通过配置现代TLS部署来保护传输中的通信
6.打包您的网络应用程序的docker图像
要求(身份验证)
1.来自NIST特别出版物800-63B:
1.符合以下各节的所有“应”和“宜”要求
2.使用以下验证器:用户选择的记忆密码(即密码/密码短语)和单因素OTP设备(例如Google Authenticator)或单因素加密设备(例如Yubikey)(如果您有)和查找机密(恢复密钥)符合§5.1和§4.2.2中的相关要求
§5.1.1.2:“记忆中的秘密应使用合适的单向密钥进行加盐和散列处理推导函数”有关适当的功能,请参阅我们的密码安全讲座记忆秘密验证器(§5.1.1.2)
选择“从以前的违规公司获得的密码”,并参考
https://haveibeenpwned.com/API/v3#PwnedPasswords以供语料库检查自动遵守§5.2.8和§5.2.9要求(身份验证)
1.来自NIST特别出版物800-63B:
3.§5.2.2:实施速率限制机制和基于图像的CAPTCHA4.在上实现新的帐户注册和绑定验证器(OTP/Yubikey和恢复密钥)同时可选:提供一种在帐户注册后更改验证器的方法
5.§7.1:实施适当的会话约束要求
6.例外情况:
OTP验证器——尤其是基于软件的OTP生成器——应该劝阻和不得促进将密钥克隆到多个设备上。谷歌验证器和相关应用程序正常
要求(E2EE聊天)
2.用户登录后,以某种方式保护两个用户之间的聊天消息,使服务器无法解密消息
1.使用ECDH密钥交换协议在两个用户之间建立共享秘密利用WebCrypto API,请参阅演示https://webkit.org/demos/webcrypto/ecdh.html密钥交换过程中交换的可以通过服务器发送信任服务器不会修改密钥交换的消息选择P-384作为基础曲线
2.从共享秘密中导出两个256位AES-GCM加密密钥和两个256比特MAC密钥使用HKDF-SHA256一个密钥用于在user1到user2之间加密,另一个密钥从user2到user1再次使用WebCrypto API,请参阅https://developer.mozilla.org/enUS/docs/Web/API/HkdfParams盐应该是唯一的,这样将来的另一个密钥派生会产生不同的密钥,使用例如从1开始的计数器nfo参数应表示当前上下文(例如,的“CHAT_KEY_USER1to2”用户1的密钥user2,“CHAT_MAC_USER1to2”表示user1的MAC密钥user2)要求(E2EE聊天)
2.用户登录后,以某种方式保护两个用户之间的聊天消息,代 写COMP3334 端到端加密聊天web应用程序使服务器无法解密消息
3.消息将在GCM模式下使用AES加密
96位IV是表示使用相同密钥加密的消息数量的计数器注意:GCM不需要不可预测的IVs,而是需要独特的IVs将IV和密文一起发送给收件人作为接受者,验证静脉注射 > 四、1以防止重放攻击使用派生的MAC密钥使用HMAC-SHA256保护IV,以防止攻击者选择IVs相关数据应反映当前上下文(例如,“CHAT_MSG_USER1to2”)身份验证标签应为128位
4.将所有关键材料存储在浏览器的HTML5本地存储中,以便在浏览器之后检索重新打开
5.显示正在交换的先前消息的历史记录+新消息
如果本地存储已被清除,则无法解密以前的消息,显示警告要求(E2EE聊天)
2.用户登录后,以某种方式保护两个用户之间的聊天消息,使服务器无法解密消息
6.当用户点击
聊天中的“刷新”按钮(而不是浏览器刷新按钮),使用新的盐要求更改的参与者应通过特殊信息通知另一方
由已使用的最后一个IV组成,字符串“change”,完全受保护旧MAC密钥与新MAC密钥消息上的两个不同MAC另一方应在处理消息之前验证旧MAC,然后导出新密钥,并在接受新密钥之前再次验证新MAC双方应在聊天记录中显示一条消息“密钥已更改”当浏览器重新打开时,应保留旧密钥以解密旧消息应根据前面的值确定要用于给定消息的密钥集在密钥交换期间发送(即,跟踪用户公钥)超过一分钟的密钥交换消息不应被视为新密钥
要参与的交换
要求(E2EE聊天)
2.用户登录后,以某种方式保护两个用户之间的聊天消息,使服务器无法解密消息
7.当本地存储被清除时,或者当给定收件人没有共享机密时发送方应使用特殊消息启动ECDH密钥交换,接收方应即使之前已经建立了共享秘密,也要参与密钥交换
8.聊天消息应使用UTF-8编码,用户之间的网络消息应为使用您自己的模式(例如,{“type”:“ECDH”、“key”:“…”}、{“type”:“msg”,“密文”:“…”,“IV”:“.”,“MAC”:“..”})9.使用console.log()记录所有加密操作(包括密钥、IV、明文等)从视觉上看,IVs不可重复使用,按键在需要时会发生变化(见下一页要求)等。
10.聊天应用程序应防止跨站点请求伪造(CSRF)、跨站点脚本(XSS)和SQL注入攻击
要求(TLS)
3.通信应在传输过程中使用TLS进行加密,配置如下:重新使用Mozilla的nginx“现代”配置,并根据需要进行更改: https://ssl-config.mozilla.org/1.仅限TLS版本1.3
2.x25519仅椭圆曲线组
3.仅TLS_CHACHA20_POLY1305_SHA256密码套件4.没有OCSP装订(因为您将使用自签名的CA证书)5.HSTS为期一周
6.TLS证书要求:
1.X.509版本3
2.P-384上的ECDSA公钥
3.SHA384作为签名的哈希算法
4.CA标志(关键):false
5.密钥使用(关键)=数字签名
6.扩展密钥使用=服务器身份验证
7.包括主题密钥标识符和授权密钥标识符
8.有效期=90天
要求(TLS)
3.通信应在传输过程中使用TLS进行加密,配置如下:7.网站应位于
https://group-[您的组号].comp3334.xavier2dc.fr:8443/第10组将在Group-10.comp3334.xavier2dc.fr8.所有子域*.comp3334.xavier2dc.fr将重定向到127.0.0.1您可以有效地使用“group-X.comp3334.xavier2dc.fr”而不是“localhost”如果您没有在localhost上托管docker容器,在主机文件中添加手动条目
Linux:/etc/主机
Windows:C:\Windows\System32\drivers\etc\hosts9.从给定的CA证书和私钥颁发证书使用与您的组对应的域名域名应同时显示为通用名称和使用者备选名称
10.CA证书的域限制为comp3334.xavier2dc.fr的子域,意思是你可以在你的计算机上安全地信任它(没有人可以为其他人生成有效的证书域)简单聊天演示
1.在包含dockercompose.yaml文件的文件夹中使用以下行部署docker容器:$sudo docker compose up-d2.到目前为止,聊天应用程序在8080端口上通过纯HTTP工作,访问地址:http://group-0.comp3334.xavier2dc.fr:80803.打开浏览器的新私人窗口,然后再次访问网站
1.铬:
2.Firefox:
4.在第一个窗口中以Alice(密码:password123)的身份登录5.以Bob(密码:password456)的身份登录第二个(私人)窗口6.从Alice聊天中选择Bob作为联系人,从Bob聊天中选择Alice作为联系人7.互相发送消息!
8.当修改服务器端(app.py)或客户端(login.html,chat.html)时,只需重新启动docker容器,则不需要重新构建容器:
$sudo docker restart[you container name]-webapp-1评估领域
1.对您的解决方案和设计的解释[50%]
提供实施的功能/要求列表
描述您的解决方案是如何工作的,特别是解释用户密码是如何存储、验证、使用哪些库、如何派生关键材质、如何你存储它们吗,它们的大小,你如何生成域

标签:web,加密,COMP3334,用户,MAC,消息,聊天,端到,密钥
From: https://www.cnblogs.com/gzashang/p/18123689

相关文章

  • Javaweb开发:HTML【1】
    目录Javaweb路线HTML基础知识DOCTYPE声明HTML标签文本版面的编辑演示标签使用对齐属性原样显示文字标签使用居中标签水平分割线标题文字标签特定文字样式标签超链接分为:内部链接、外部链接链接到同一文档的各个部分使用电子邮件背景图像的设定插入图像添加视频/音频滚动文字meta......
  • CEF编译报错:ValueError: path is on mount '\\\\tab_group_types.mojom-webui.js'
    F:\code\chromium_git\chromium\src>autoninja-Cout\Debug_GN_x64cef"f:\code\depot_tools\bootstrap-2@3_11_6_chromium_30_bin\python3\bin\python3.exe"F:\code\depot_tools\ninja.py-Cout\Debug_GN_x64cef-j10ninja:Enteringdirec......
  • ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
    ASP.NETMVCWebApi接口返回JOSN日期格式化dateformat全局配置WebApiConfigpublicstaticclassWebApiConfig{publicstaticvoidRegister(HttpConfigurationconfig){//WebAPI配置和服务//WebAPI路由config.MapHttpAttributeRoutes......
  • Web测试和APP测试的侧重点和区别
    1、Web测试的重点是UI、功能、性能、兼容、安全、资源链接2、APP测试的重点是安装卸载、资源占用、软件升级和用户数据保存、按钮功能、机器按键、注册登录和展示内容限制,打开和退出3、二者区别兼容性不同:Web考虑不同浏览器和分辨率;APP考虑不同机型和和版本......
  • 深入理解 WebSocket:实时双向通信的核心技术(python案例)
    引言WebSocket是一种在Web开发中广泛使用的通信协议,它提供了一种实时、双向的通信机制,允许客户端和服务器之间建立持久连接,实现高效的实时数据传输。本文将深入探讨WebSocket的工作原理、优势、应用场景以及使用示例,帮助读者全面了解WebSocket技术。什么是WebSocket?......
  • webrtc分支切换到m94 下载报错 FileNotFoundError: [Errno 2] No such file or direct
    FileNotFoundError:[Errno2]Nosuchfileordirectory:'vpython' 此问题翻遍整个网络,没有解决方案,希望能帮忙到需要的人 描述:      正常下载代码后,基于master(默认)编译通过,现需要切到m94分支(参考 Linux/Ubuntu编译WebRTC&libmediasoupclient_linuxg++......
  • 狂神说Java Web学习笔记_Servlet
    Servlet简介Servlet是sun公司开发的动态web的一门技术。提供的其中一个接口叫Servlet。把实现了Servlet接口的Java程序叫Servlet。HelloServletServlet在Sun公司有两个默认实现类,HttpServlet,GenericServlet。importjavax.servlet.ServletException;importjavax.servlet.ht......
  • WebView2 系列之-前端向后端传递文件对象
    背景WebView2中,前端到后端的消息传递,通常是不支持传递对象的。但是我在查阅官方文档时发现了一个例外,那就是方法postMessageWithAdditionalObjects如何传递附加对象webview2中,前端js向后端传递消息通常使用window.chrome.webview.postMessage方法,postMessage的定义如下:......
  • Web 前端
    web标准:构成:语言说明结构HTML页面元素和内容表现CSS网页元素的外观和位置等页面样式(颜色,大小)行为JavaScript网页模型的定义与页面交互注释:ctrl + / 文本格式化标签介绍:场景:需要让文字加粗,下划线,倾斜,删除线等效果b加粗strong加粗u下划线ins下划线i倾斜em倾斜......
  • IDEA中Servlet中的注解@WebServlet报错,import javax.servlet.annotation.WebServlet;
    IDEA报错信息:[java.lang.LinkageError:loaderconstraintviolation:loader(instanceoforg/apache/jasper/servlet/检查pom依赖,看到这个,其实是因为selvlet这个依赖的version太低了,和你用的tomcatserver版本不匹配,所以可以降低tomcat版本,降成tomcat7及以下,或者提升pom中se......