แชทเว็บที่เข้ารหัสง่าย ๆ ขับเคลื่อนโดย Socket.io, Web Cryptography API โครงการนี้เป็นตัวอย่างของการเข้ารหัสด้านลูกค้าและวิธีที่คุณสามารถรวมเข้ากับบริการแชทได้อย่างไร
Darkwire Server เป็นแอปพลิเคชัน Node.js
ไคลเอนต์ Darkwire.io เขียนด้วย JavaScript ด้วย React JS และ Redux
คัดลอกไฟล์ .env.dist ใน server/ และ client/ ไดเรกทอรีโดยไม่มีส่วนขยาย .dist และปรับให้เข้ากับความต้องการของคุณ
คุณต้องมีการเชื่อมต่อ HTTPS เพื่อให้ Darkwire ทำงานได้เพราะใช้ API เบราว์เซอร์ Crypto ซึ่งสามารถเข้าถึงได้เฉพาะใน LocalHost และหลังการเชื่อมต่อ HTTPS
คุณสามารถใช้ NVM เพื่อติดตั้งโหนดเวอร์ชันที่เหมาะสมโดยใช้คำสั่งนี้:
nvm install # If the right node version is not already installed
nvm use
npm install yarn -g # To install yarn
ติดตั้งการพึ่งพา
$ yarn
เริ่มเซิร์ฟเวอร์และไคลเอนต์
$ yarn setup
$ yarn dev
เพียงแค่เรียกใช้สิ่งต่อไปนี้:
$ docker-compose up
สิ่งนี้จะสร้างไฟล์ .env เริ่มต้นโดยอัตโนมัติสำหรับคุณ
สร้างการผลิตเซิร์ฟเวอร์และไคลเอนต์
$ yarn build
เริ่มเซิร์ฟเวอร์
$ yarn start
สร้างมัน
$ docker build --tag darkwire.io:latest .
จากนั้นเรียกใช้ ตัวอย่าง:
$ docker run --init --name darkwire.io --rm -p 3001:3001 darkwire.io
คุณสามารถใช้ตัวแปรสภาพแวดล้อมใด ๆ ที่มีอยู่ใน server/.env.dist และ client/.env.dist ค่าเริ่มต้นมีอยู่ใน DockerFile
โปรดรายงานปัญหาด้านความปลอดภัยใด ๆ ที่ [email protected]
Darkwire ใช้การรวมกันของการเข้ารหัสแบบอสมมาตร (RSA-OAEP), คีย์เซสชันสมมาตร (AES-CBC) และปุ่มลงนาม (HMAC) เพื่อความปลอดภัย
นี่คือภาพรวมของการแชทระหว่างอลิซและบ๊อบ (ใช้กับการแชทเป็นกลุ่ม):
การแชทเป็นกลุ่มทำงานในลักษณะเดียวกันเพราะในขั้นตอนที่ 5 เราเข้ารหัสคีย์ด้วยคีย์สาธารณะของทุกคน เมื่อมีการส่งข้อความจะมีปุ่มเข้ารหัสสำหรับทุกคนในห้องและผู้รับจากนั้นเลือกข้อความสำหรับพวกเขาตามรหัสผู้ใช้ของพวกเขา
Darkwire ไม่ได้รับประกันว่าบุคคลที่คุณกำลังสื่อสารด้วยคือสิ่งที่คุณคิดว่าเป็น ฟังก์ชั่นการตรวจสอบความถูกต้องอาจรวมอยู่ในเวอร์ชันอนาคต
Darkwire เข้ารหัสเอกสารลงใน Base64 โดยใช้ BTOA และเข้ารหัสข้อความแชทแบบเดียวกับ
ขีด จำกัด ขนาดไฟล์ที่สามารถถ่ายโอนได้เริ่มต้นคือ 4MB แต่สามารถเปลี่ยนแปลงได้ในไฟล์ .env ด้วยตัวแปร REACT_APP_MAX_FILE_SIZE
Darkwire ใช้ socket.io เพื่อส่งข้อมูลที่เข้ารหัสโดยใช้ Secure WebSockets (WSS)
ห้องพักจะถูกเก็บไว้ในหน่วยความจำบนเซิร์ฟเวอร์จนกว่าผู้เข้าร่วมทุกคนจะออกไป ณ จุดที่ห้องถูกทำลาย มีเพียงคีย์สาธารณะเท่านั้นที่เก็บไว้ในหน่วยความจำเซิร์ฟเวอร์ตลอดระยะเวลาชีวิตของห้อง
ประวัติการแชทจะถูกเก็บไว้ในเบราว์เซอร์ของผู้เข้าร่วมแต่ละคนดังนั้นจึงถูกลบอย่างมีประสิทธิภาพ (สำหรับผู้ใช้นั้น) เมื่อปิดหน้าต่าง