精品深夜AV无码一区二区_伊人久久无码中文字幕_午夜无码伦费影视在线观看_伊人久久无码精品中文字幕

COMP3334代做、代寫Python程序語言
COMP3334代做、代寫Python程序語言

時間:2024-04-03  來源:  作者: 我要糾錯



COMP3334 Project
End-to-end encrypted chat web application
Semester 2, 2023/2024
Nowadays, web services are the most
common form of applications that users are
exposed to. Web browsers become the most
popular application on a computer that
enables users to access those web services.
Ensuring the security of web services is
essential for the Internet. Moreover, privacy
of communications is an important feature of
modern times. Your job is to implement an
end-to-end encrypted chat web application
and secure various aspects of the website.
Overview
Objectives
1. Adapt a basic chat web application to become a secure E2EE chat web app
2. Comply with some of the requirements in NIST Special Publication 800-63B “Digital
Identity Guidelines – Authentication and Lifecycle Management” for US federal
agencies (which is also a reference for other types of systems)
3. Implement a secure MFA mechanism based on passwords and OTP (or FIDO2)
4. Encrypt communications between two users so that the server does not know the
content of the messages (E2E encryption)
5. Protect communications in transit by configuring a modern TLS deployment
6. Package a docker image of your web app
Requirements (authentication)
1. From NIST Special Publication 800-63B:
1. Comply with all SHALL and SHOULD requirements from sections listed below
2. Use the following authenticators:
• User-chosen Memorized Secret (i.e., password/passphrase)
• and Single-Factor OTP Device (e.g., Google Authenticator)
• or Single-Factor Cryptographic Device (e.g., Yubikey) if you have one
• and Look-Up Secrets (recovery keys)
• Comply with related requirements in §5.1 and §4.2.2
• §5.1.1.2: “Memorized secrets SHALL be salted and hashed using a suitable one-way key
derivation function”
• See our Password Security lecture for an appropriate function
• Memorized Secret Verifiers (§5.1.1.2)
• Choose “Passwords obtained from previous breach corpuses” and refer to
https://haveibeenpwned.com/API/v3#PwnedPasswords for the corpus to check against
• §5.2.8 and §5.2.9 are automatically complied
Requirements (authentication)
1. From NIST Special Publication 800-63B:
3. §5.2.2: Implement rate-limiting mechanisms AND image-based CAPTCHAs
4. Implement new account registration and bind authenticators (OTP/Yubikey and recovery keys) at
the same time
• Optional: provide a way to change authenticators after account registration
5. §7.1: Implement proper session binding requirements
6. Exceptions:
• OTP authenticators — particularly software-based OTP generators — SHOULD discourage and
SHALL NOT facilitate the cloning of the secret key onto multiple devices.
• Google Authenticator and related apps are OK
Requirements (E2EE chat)
2. Once users are logged in, secure chat messages between two users in a way so that the server cannot
decrypt the messages
1. Use the ECDH key exchange protocol to establish a shared secret between two users
• Leverage the WebCrypto API, see demo https://webkit.org/demos/webcrypto/ecdh.html
• Exchanged information during the key exchange can be sent through the server
• The server is trusted not to modify messages of the key exchange
• Choose P-384 as the underlying curve
2. Derive two 256-bit AES-GCM encryption keys and two 256-bit MAC keys from the shared secret
using HKDF-SHA256
• One key for encryption between user1 to user2, and another one from user2 to user1
• Using WebCrypto API again, see https://developer.mozilla.org/enUS/docs/Web/API/HkdfParams
• The salt should be unique so another key derivation in the future produces different keys, use
for instance a counter starting at 1
• The info parameter should represent the current context (e.g., “CHAT_KEY_USER1to2” for the
key for user1user2, and “CHAT_MAC_USER1to2” for the MAC key for user1user2)
Requirements (E2EE chat)
2. Once users are logged in, secure chat messages between two users in a way so that the server cannot
decrypt the messages
3. Messages will be encrypted using AES in GCM mode
• 96-bit IVs are counters representing the number of messages encrypted with the same key
• Note: GCM does not require unpredictable IVs, but unique IVs
• Send the IV together with the ciphertext to the recipient
• As a recipient, verify that IV𝑖𝑖 > IV𝑖𝑖−1 to prevent replay attacks
• Protect the IV with HMAC-SHA256 using the derived MAC key to prevent the attacker from
choosing IVs
• Associated data should reflect the current context (e.g., “CHAT_MSG_USER1to2”)
• Authentication tags should be 128 bits
4. Store all key material in the HTML5 Local Storage of the browser to be retrieved after the browser
is reopened
5. Display the history of previous messages being exchanged + new messages
• If Local Storage has been cleared, previous messages cannot be decrypted, show warning
Requirements (E2EE chat)
2. Once users are logged in, secure chat messages between two users in a way so that the server cannot
decrypt the messages
6. All symmetric keys and IVs should be re-derived from the shared secret when user clicks on a
“Refresh” button in the chat (not the browser refresh button), using a new salt
• The participant that requests a change should inform the other party with a special message
composed of the last IV that has been used, the string “change”, altogether protected with
the old MAC key AND the new MAC key
• Two different MACs over the message
• The other party should verify the old MAC before processing the message, then derive
new keys and verify again the new MAC before accepting the new keys
• Both parties should show a message “Keys changed” in the chat history
• Old keys should be kept to decrypt older messages when the browser is reopened, you
should identify which set of keys to use for a given message based on the preceding values
sent during the key exchange (i.e., keep track of user public keys)
• Key exchange messages older than a minute should not be considered as a fresh key
exchange to engaged into
Requirements (E2EE chat)
2. Once users are logged in, secure chat messages between two users in a way so that the server cannot
decrypt the messages
7. When the Local Storage is cleared, or when there is no shared secret for a given recipient, the
sender should initiate the ECDH key exchange using a special message and the recipient should
engage in the key exchange even when there had been a shared secret previously established
8. Chat messages should be encoded using UTF-8, and network messages between users should be
formatted in JSON using your own schema (e.g., {“type”:”ECDH”, “key”:”…”}, {“type”:”msg”,
“ciphertext”:”…”, “IV”:”…”, “MAC”:”…”})
9. Use console.log() to log all crypto operations (including key, IV, plaintext, etc.)
• It should be visually obvious that IVs are not reused, keys change when needed (see next
requirements), etc.
10. The chat app should be protected against cross-site request forgery (CSRF), cross-site scripting
(XSS), and SQL injection attacks
Requirements (TLS)
3. Communications should be encrypted in transit using TLS with the following configuration:
• Reuse Mozilla’s “modern” configuration for nginx, and change it as needed:
• https://ssl-config.mozilla.org/
1. TLS version 1.3 only
2. x25519 Elliptic Curve Group only
3. TLS_CHACHA20_POLY1305_SHA256 cipher suite only
4. No OCSP stappling (since you will use a self-signed CA certificate)
5. HSTS for one week
6. TLS certificate requirements:
1. X.509 version 3
2. ECDSA public key over P-384
3. SHA384 as hashing algorithm for signature
4. CA flag (critical): false
5. Key Usage (critical) = Digital Signature
6. Extended Key Usage = Server Authentication
7. Include both Subject Key Identifier and Authority Key Identifier
8. Validity period = 90 days
Requirements (TLS)
3. Communications should be encrypted in transit using TLS with the following configuration:
7. The website should be hosted at
https://group-[your-group-number].comp3334.xavier2dc.fr:8443/
• Group #10 will be at group-10.comp3334.xavier2dc.fr
8. All subdomains *.comp3334.xavier2dc.fr will redirect to 127.0.0.1
• You can effectively use “group-X.comp3334.xavier2dc.fr” instead of “localhost”
• If you do not host the docker container on localhost,
add a manual entry in your hosts file
• Linux: /etc/hosts
• Windows: C:WindowsSystem32driversetchosts
9. Issue the certificate from the given CA certificate and private key
• Use the domain name corresponding to your group
• Domain should appear as both Common Name and Subject Alternative Name
10. The CA certificate is domain-constrained to subdomains of comp3334.xavier2dc.fr, meaning
you can safely trust it on your computer (nobody can generate valid certificates for other
domains)

Simple Chat Demo
1. Deploy the docker container using the following line within the folder that contains the dockercompose.yaml file:
$ sudo docker-compose up -d
2. So far, the chat app works over plain HTTP on port 8080, access it at:
http://group-0.comp3334.xavier2dc.fr:8080
3. Open a new private window of your browser and access the website again
1. Chrome:
2. Firefox:
4. Login as Alice (password: password123) on the first window
5. Login as Bob (password: password456) on the second (private) window
6. Select Bob as contact from Alice’s chat, select Alice as contact from Bob’s chat
7. Send messages each other!
8. When modifying the server-side (app.py) or client-side (login.html, chat.html), simply restart the
docker container, you do not need to rebuild the container:
$ sudo docker restart [you-container-name]-webapp-1
Areas of assessments
1. Explanations of your solution and design [50%]
• Provide list of features/requirements implemented
• Describe how your solution works, especially explain how user passwords are
stored, verified, which libraries do you use, how key materials are derived, how
do you store them, their size, how do you generate the domain certificate, etc.
• Show autonomy and creativity when requirements allow
2. Implementation of your solution & demo [50%]
• Follow proper coding style, write informative comments, give concise and
relevant variable names, respect indentation, stay consistent in style
• Make things work!
Submission
• Submit a ZIP’d file containing:
1. Modified chat app docker-compose stack
• “sudo docker-compose up -d” should work!
• Accessing https://group-X.comp3334.xavier2dc.fr:8443/ should work with
a valid certificate issued by the given CA
• Group number is the one you registered on Blackboard
2. PDF report
3. 8-minute video with a demonstration of your solution
• User registration + new chat with existing user + refresh website & reload chat
4. Statement of individual contributions
• Who did what, how much % of the work does that represent?
• Format will be given to you later
• Deadline for submission is Sunday, April 14 @ 23:59 (hard deadline)
Questions?
Technical questions:
• CUI Bowen [email protected]
Administrative questions:
• LYU Xinqi [email protected]
FAQ
1. Can I use a library?
• Depends, does it replace the whole chat protocol with a better and secure chat?
Then, no. You still need to implement a secure chat protocol.
• Does the library implement part of the requirements (e.g., proper session
management, OTP, hashing algorithm, etc.)? Then, yes.
2. How can I rebuild the docker container if I need to modify, say, the nginx config?
1. docker-compose down -v
2. docker-compose build --no-cache
3. docker-compose up -d
3. How can I debug errors?
• docker logs [your-container]
FAQ
4. How does the web chat application work?
1. It is written in Python using Flask
2. It is running behind the WSGI server Gunicorn
3. Which is running behind the reverse proxy nginx (which should provide TLS)
4. The front-end is written in HTML and Javascript
5. The server app writes messages into a MySQL database

請加QQ:99515681  郵箱:[email protected]   WX:codinghelp

標簽:

掃一掃在手機打開當前頁
  • 上一篇:COMP 330代做、Python設計程序代寫
  • 下一篇: CISC3025代寫、代做c++,Java程序設計
  • 無相關信息
    昆明生活資訊

    昆明圖文信息
    蝴蝶泉(4A)-大理旅游
    蝴蝶泉(4A)-大理旅游
    油炸竹蟲
    油炸竹蟲
    酸筍煮魚(雞)
    酸筍煮魚(雞)
    竹筒飯
    竹筒飯
    香茅草烤魚
    香茅草烤魚
    檸檬烤魚
    檸檬烤魚
    昆明西山國家級風景名勝區
    昆明西山國家級風景名勝區
    昆明旅游索道攻略
    昆明旅游索道攻略
  • 短信驗證碼平臺 理財 WPS下載

    關于我們 | 打賞支持 | 廣告服務 | 聯系我們 | 網站地圖 | 免責聲明 | 幫助中心 | 友情鏈接 |

    Copyright © 2025 kmw.cc Inc. All Rights Reserved. 昆明網 版權所有
    ICP備06013414號-3 公安備 42010502001045

    精品深夜AV无码一区二区_伊人久久无码中文字幕_午夜无码伦费影视在线观看_伊人久久无码精品中文字幕
    <samp id="e4iaa"><tbody id="e4iaa"></tbody></samp>
    <ul id="e4iaa"></ul>
    <blockquote id="e4iaa"><tfoot id="e4iaa"></tfoot></blockquote>
    • <samp id="e4iaa"><tbody id="e4iaa"></tbody></samp>
      <ul id="e4iaa"></ul>
      <samp id="e4iaa"><tbody id="e4iaa"></tbody></samp><ul id="e4iaa"></ul>
      <ul id="e4iaa"></ul>
      <th id="e4iaa"><menu id="e4iaa"></menu></th>
      欧美日韩www| 粉嫩一区二区三区性色av| 午夜影视日本亚洲欧洲精品| 国产精一区二区三区| 91精品国产免费| 亚洲成av人在线观看| 欧美在线观看视频一区二区三区| 中文字幕一区二区不卡 | av成人动漫在线观看| 亚洲色图视频免费播放| 99久久免费国产| 夜夜精品视频一区二区| 欧美三级资源在线| 免费观看成人av| 久久综合九色综合欧美就去吻| 青青草国产精品亚洲专区无| 欧美国产日本韩| 日韩欧美一级片| 91麻豆精品在线观看| 成人激情小说乱人伦| 欧美激情艳妇裸体舞| 成人免费高清视频| 中文字幕在线不卡一区二区三区| 色婷婷av一区二区三区gif | 国产成人在线观看| 中文字幕av不卡| 在线影院国内精品| 麻豆精品视频在线观看视频| 久久九九久精品国产免费直播| 成av人片一区二区| 亚州成人在线电影| 精品国产三级电影在线观看| 成人不卡免费av| 日韩电影一区二区三区四区| 国产亚洲精久久久久久| 欧亚洲嫩模精品一区三区| 紧缚奴在线一区二区三区| 国产精品黄色在线观看| 欧美日韩免费电影| 成人涩涩免费视频| 免费观看日韩电影| 亚洲精品日日夜夜| 精品国产精品一区二区夜夜嗨| 一本久久综合亚洲鲁鲁五月天| 蜜桃免费网站一区二区三区| 国产欧美日韩精品一区| 欧美喷潮久久久xxxxx| 成人av影视在线观看| 久久激情综合网| 图片区小说区区亚洲影院| 中文字幕中文字幕中文字幕亚洲无线| 欧美日韩国产系列| 欧美在线观看一区| 麻豆传媒一区二区三区| 成人v精品蜜桃久久一区| 日韩中文字幕一区二区三区| 亚洲精品乱码久久久久久黑人| 久久综合九色综合欧美就去吻| 91 com成人网| 欧美综合亚洲图片综合区| eeuss鲁片一区二区三区| 男女视频一区二区| 免费观看日韩av| 久久精品欧美日韩| 色网综合在线观看| 91免费国产在线观看| gogogo免费视频观看亚洲一| 国产真实乱子伦精品视频| 久久精品国产精品青草| 五月天中文字幕一区二区| 亚洲视频一区二区免费在线观看| 久久影视一区二区| 精品国产一区二区亚洲人成毛片| 欧美一区二区三区白人| 欧美一区日本一区韩国一区| 91精品一区二区三区在线观看| 在线精品视频免费播放| 91黄视频在线| 欧美人xxxx| 91精品国产aⅴ一区二区| 91精品国产品国语在线不卡| 欧美一三区三区四区免费在线看| 欧美老年两性高潮| 538prom精品视频线放| 一区二区三区在线观看网站| 一色屋精品亚洲香蕉网站| 中文字幕在线观看不卡| 亚洲精品久久嫩草网站秘色| 一级特黄大欧美久久久| 日韩主播视频在线| 国产精品一级片| 91亚洲精品一区二区乱码| 欧洲精品视频在线观看| 欧美电视剧在线看免费| 久久综合久久综合九色| 中文字幕+乱码+中文字幕一区| 丁香激情综合国产| 91伊人久久大香线蕉| 在线电影院国产精品| 国产亚洲视频系列| 亚洲乱码国产乱码精品精的特点 | 激情五月婷婷综合网| 国产一区二区三区高清播放| 成人黄色一级视频| 91黄色激情网站| 精品日韩一区二区三区 | 26uuu国产日韩综合| 中文字幕第一区综合| 亚洲综合色在线| 精品一区二区三区欧美| 99re成人精品视频| 91麻豆精品久久久久蜜臀| 国产欧美一区在线| 亚洲成人第一页| 成人h动漫精品一区二区| 欧美精品在欧美一区二区少妇| 久久久蜜臀国产一区二区| 亚洲一级片在线观看| 国产成人免费xxxxxxxx| 欧美一区二区三区视频在线| 中文字幕一区二区视频| 国产一区二区日韩精品| 欧美特级限制片免费在线观看| 亚洲国产精品一区二区久久恐怖片| 蜜臀va亚洲va欧美va天堂| 成人伦理片在线| 日韩久久精品一区| 亚洲一区二区三区在线| 国产不卡视频在线观看| 日韩一区二区免费电影| 亚洲免费观看高清完整| 国产不卡免费视频| 精品久久国产字幕高潮| 午夜欧美在线一二页| 一本一道久久a久久精品| 久99久精品视频免费观看| 欧美日韩一区二区三区高清| 亚洲色图视频网| 成人性生交大合| 国模少妇一区二区三区| 欧美日韩亚洲综合| 亚洲综合偷拍欧美一区色| 91在线小视频| 日韩理论片一区二区| 成人免费三级在线| 国产亚洲综合色| 国产凹凸在线观看一区二区| 精品1区2区在线观看| 久久激情综合网| xvideos.蜜桃一区二区| 国产尤物一区二区| 国产日韩欧美精品在线| 粉嫩aⅴ一区二区三区四区| 久久精品水蜜桃av综合天堂| 国产高清不卡二三区| 亚洲国产精品精华液2区45| 国产成人免费网站| 亚洲图片另类小说| 欧美亚洲动漫精品| 日韩av电影天堂| 欧美成人r级一区二区三区| 日本视频中文字幕一区二区三区| 欧美一区二区网站| 国产精品资源网| 国产精品久久久久aaaa樱花 | 91精品国产一区二区三区蜜臀| 樱桃国产成人精品视频| 欧美系列在线观看| 久久国产精品第一页| 国产无遮挡一区二区三区毛片日本| 国产传媒久久文化传媒| 综合久久一区二区三区| 日韩中文欧美在线| 日韩亚洲欧美在线观看| 国产原创一区二区| 欧美国产亚洲另类动漫| 在线免费亚洲电影| 免费视频最近日韩| 国产精品久久久久婷婷二区次| 色天使色偷偷av一区二区| 亚洲电影视频在线| 久久久久久久久一| 中文字幕一区二| 欧美精品一卡两卡| www.一区二区| 性久久久久久久| 国产精品免费看片| 欧美乱妇一区二区三区不卡视频| 久久er精品视频| 亚洲色图欧美在线| 欧美一级欧美一级在线播放| www.欧美色图| 久久国产精品72免费观看| 亚洲视频资源在线| 久久久一区二区| 欧美一区二区三区视频在线观看| 99久久久免费精品国产一区二区| 日韩精品一二三区| 亚洲欧美日韩一区二区三区在线观看| 精品欧美乱码久久久久久 |