X:/Chat เป็นเว็บแอปพลิเคชันที่ใช้ HTML, CSS และ JavaScript บน front-end และ node.js บน back-end ช่วยให้ผู้ใช้สามารถสื่อสารกันได้อย่างปลอดภัย (แม้ว่าฉันจะยังใหม่กับ node.js และไม่สามารถรับประกันความปลอดภัยดังกล่าวได้)
JavaScript และที่เก็บข้อมูลในเครื่องเป็น สิ่งจำเป็น อย่างยิ่งสำหรับเว็บแอพที่จะใช้งานได้ ที่เก็บข้อมูลท้องถิ่นใช้เพื่อจัดเก็บกุญแจสาธารณะกุญแจส่วนตัวการตั้งค่าและอีกมากมาย
หากคุณใช้คุณลักษณะ "การแชทที่ไม่ระบุชื่อ" จะไม่มีอะไรถูกเก็บไว้โดยเซิร์ฟเวอร์ ฉันต้องการสร้างรูปแบบการสื่อสารที่ปลอดภัยที่สุดที่ฉันคิดได้และฉันก็เลือกที่จะไม่เก็บบันทึกการสนทนาผ่านการแชทที่ไม่ระบุชื่อ เมื่อคุณคลิกที่ปุ่ม "แชทที่ไม่ระบุชื่อ" คุณจะได้รับการเปลี่ยนเส้นทางเป็น "/นิรนาม" ซึ่งมีการสร้าง ID สำหรับคุณพร้อมกับคีย์สาธารณะและคีย์ส่วนตัว สิ่งเหล่านี้จะถูกบันทึกไว้บนเบราว์เซอร์ของคุณเพียงอย่างเดียว (ในที่เก็บข้อมูลท้องถิ่น) เซิร์ฟเวอร์ไม่ได้เก็บข้อมูลใด ๆ นี้ สิ่งเดียวที่เซิร์ฟเวอร์เก็บคือรหัสการสนทนาและเวลาการสร้าง สิ่งนี้ทำเพื่อให้การสนทนาสามารถตั้งค่าให้หมดอายุหลังจากผ่านไปหนึ่งชั่วโมง หลังจากการโหลดเสร็จสมบูรณ์คุณสามารถส่ง URL ของคุณไปยังทุกคนที่คุณต้องการและให้พวกเขาเชื่อมต่อกับคุณ เมื่อพวกเขาทำพวกเขายังได้รับคู่คีย์สาธารณะ/ส่วนตัวที่สร้างขึ้นสำหรับพวกเขาเช่นเดียวกับ ID จากนั้นคุณจะได้รับคีย์สาธารณะและรหัสของพวกเขา เมื่อคุณส่งข้อความคุณจะเข้ารหัสโดยใช้คีย์สาธารณะ RSA-2048 ซึ่งพวกเขาถอดรหัสไว้ที่ด้านข้างของพวกเขา (ในพื้นที่) โดยใช้คีย์ส่วนตัวของพวกเขา เนื่องจากข้อความถูกเข้ารหัสทางฝั่งไคลเอ็นต์เซิร์ฟเวอร์จึงไม่ทราบว่ากำลังพูดอะไร การรีเฟรชหน้าจะลบข้อความสำหรับใครก็ตามที่รีเฟรชเนื่องจากข้อความไม่ได้เก็บไว้ ทุกที่ เนื่องจากความจริงที่ว่าไม่มีอะไรถูกเก็บไว้บนเซิร์ฟเวอร์มันหมายความว่าผู้ใช้สามารถเปลี่ยน ID ของพวกเขาได้อย่างง่ายดายซึ่งเป็นสาเหตุที่ทำให้โครงการนี้ถูกใช้โดยกลุ่มเล็ก ๆ มากกว่าประชาชนทั่วไป การมีเซิร์ฟเวอร์จัดเก็บการสนทนาที่ไม่ระบุชื่อจะให้ประโยชน์ของการสนทนาที่ไม่เปลี่ยนรูปโดยผู้ใช้ แต่ก็หมายความว่าเซิร์ฟเวอร์สามารถแก้ไขได้และบันทึกนั้นจะมีอยู่ คุณอยากไว้วางใจเพื่อนของคุณหรือเซิร์ฟเวอร์สุ่มบ้างไหม?
การแชทปกติเป็นเหมือนแอปพลิเคชันแชททั่วไปของคุณ ข้อความยังคงเข้ารหัสอยู่ทางฝั่งไคลเอ็นต์ด้วย RSA-2048 และปุ่มส่วนตัวของผู้ใช้ถูกเข้ารหัสด้วย AES-256-CTR ซึ่งใช้แฮช sha512 ของรหัสผ่านของผู้ใช้เป็นคีย์ถอดรหัส รหัสผ่านของผู้ใช้จะถูกเก็บไว้โดยใช้ bcrypt พร้อม 10 รอบเกลือ กล่าวโดยย่อเว้นแต่ว่ารหัสเซิร์ฟเวอร์ได้รับการแก้ไขหรือบางอย่างเพื่อจับภาพคีย์ส่วนตัวของผู้ใช้ไม่มีวิธีที่จะได้รับเนื้อหาของการสนทนา การตั้งค่าผู้ติดต่อและข้อมูลอื่น ๆ ของผู้ใช้จะถูกเก็บไว้ในรูปแบบ JSON ในไฟล์ข้อความเพื่อการเข้าถึงได้ง่าย สิ่งเหล่านี้ถูกเก็บไว้ในข้อความธรรมดา แต่มันง่ายที่จะเข้ารหัสด้วยรหัสผ่านของผู้ใช้และ AES หากคุณต้องการทำให้เป็นจริงโปรดจำไว้ว่ามีฟังก์ชั่นที่เขียนไว้แล้วเพื่อให้ง่ายขึ้น คุณสามารถใช้ "AES_ENCRYPT (PlainText, Password)" และ "AES_DECRYPT (รหัสผ่านที่เข้ารหัส)" ที่ฉันเขียนเพื่อเข้ารหัส/ถอดรหัสได้อย่างง่ายดายทุกอย่างที่คุณต้องการ
อาจมีข้อบกพร่องบางอย่างหรือพฤติกรรมที่ไม่คาดคิดบางอย่าง แต่นี่คือสิ่งที่คาดหวังนี่คือโครงการ Node.js แรกของฉัน หากคุณพยายามทำลายแอพคุณจะประสบความสำเร็จอย่างมาก มีการตรวจสอบการตรวจสอบความถูกต้องไม่มากนักและเช่นที่ฉันต้องการ แต่มีเพียงพอที่จะปกป้องบัญชีและการสนทนาของผู้ใช้ ฉันขอโทษล่วงหน้าหากมีอะไรผิดพลาด