-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local
Bảo mật tầng socket
Giao tiếp qua mạng internet, hay nói cách khác là giao tiếp thông qua socket đều là những môi trường chứa đựng rất nhiều rủi ro. Giữa một rừng các thiết bị từ router cho đến switch hay các modem wifi, thêm vào nữa là sự kiểm soát của các nhà cung cấp mạng internet (ISP - Internet Service Provider) và chính phủ làm cho thông tin của chúng ta cực kì thiếu an toàn, chính vì vậy cần phải có một cơ chế bảo mật để bảo vệ chúng ta khỏi những nguy cơ:
- Bị nghe lén: một người nào đó có thể xen vào cuộc hội thoại của chúng ta và nghe lén, từ đó họ sẽ lợi dụng các thông tin này để chuộc lợi, đặc biệt các thông tin nhạy cảm như mật khẩu, token, thông tin hộ chiếu hay chứng minh nhân dân
- Bị thay đổi thông tin: một người nào đó có thể xen ngang vào cuộc trò chuyện, thay đổi nội dung cuộc trò truyện để gửi các mã độc hại
- Bị giả mạo: một người nào đó có thể giả mạo người gửi để phát tán các thông tin nguy hiểm
Ý tưởng ban đầu
Thật may mắn cho chúng ta là các nhà khoa học tài ba đã sáng tạo ra RSA, thuật toán mã hoá bất đối xứng thần thánh. Với cặp khoá bí mật và công khai, chúng ta có thể thoải mái trao đổi khoá công khai mà không sợ bị lộ khoá bí mật. Quy trình khá đơn giản như sau:
- Client và server connect với nhau
- Client gửi đến server yêu cầu bắt tay: ở bước này client gửi khoá công khai của mình đến server
- Server lưu lại khoá công khai của client và gửi khoá công khai của mình cho client
- Sau khi client và server đã có khoá công khai của nhau, 2 bên sẽ sử dụng public key để mã hoá dữ liệu gửi đi và sử dụng private key của mình để giải mã dữ liệu nhận được
Ý tưởng cải tiến
Nhìn các bước trao đổi ở trên thì có vẻ khá đơn giản và hay ho, nhưng lại có vấn đề đó là tốc độ mã hoá và giả mã của RSA rất chậm, nếu cứ sử dụng phương pháp này thì hiệu năng sẽ bị giảm thê thảm. Vậy nên chúng ta sẽ cần cải tiến như sau:
- Client và server connect với nhau
- Client gửi đến server yêu cầu bắt tay: ở bước này client gửi khoá công khai của mình đến server
- Server lưu lại khoá công khai của client và gửi khoá công khai của mình kèm theo session key (khoá cho mã hoá đối xứng, có thể là AES) cho client. Session key này sẽ được mã hoá với khoá công khai của client. Ở bước này server có thể không cần thiết phải gửi khoá công khai của mình cho client nếu client không có nhu cầu sử dụng.
- Sau khi client nhận được Session key nó sẽ giải mã bằng private key của mình và lưu lại, từ đây client và server có thể sử dụng session key để mã hoá và giải mã dữ liệu, tốc độ vì thế mà sẽ được cải thiện đáng kể.
An toàn nhưng chưa đủ
Một trong những môi trường nguy hiểm nhất đó chính là môi trường web. Bất kì ai cũng có thể tạo ra một website với một tên miền, và trong thế giới với hàng trăm triệu trang web như hiện nay thì không thể biết đâu là thật đâu là giả để mà tin, chính vì vậy chúng ta sẽ cần có sự tham gia của bên thứ 3 để chứng thực, chúng ta gọi đó là CA (Certificate Authority), mình sẽ nói ở bài sau nhé.
Tham khảo
-
Design Pattern
- Singleton Design Pattern
- Factory Design Pattern
- Factory Method Design Pattern
- Abstract Factory Design Pattern
- Builder Design Pattern
- Prototype Design Pattern
- Object Pool Design Pattern
- Chain of Responsibility Design Pattern
- Command Design Pattern
- Interpreter Design Pattern
- Iterator Design Pattern
- Mediator Design Pattern
- Memento Design Pattern
- Observer Design Pattern
- Observer Design Pattern - Xử Lý Exception
- Strategy Design Pattern
- Template Method Design Pattern
- Visitor Design Pattern
- Null Object Design Pattern
- Adapter Design Pattern
- Bridge Design Pattern
- Composite Design Pattern
- Decorator Design Pattern
- Flyweight Design Pattern
- Proxy Design Pattern
- S.O.L.I.D
- Clean code
- Lập trình socket
- Java Core
- Multi-Thread
- Spring
- Java Web
- Memory Caching
- Message Queue
- DevOps
- Xây dựng một nền tảng
- MongoDB
- MySQL timestamp
- Properties vs yaml
- Kotlin
- Lập Trình Machine Learning với PyTorch
- Mã Nguồn Mở
- Ezy HTTP
- Free Chat
- Một số kinh nghiệm với Git
- Review cho đồng nghiệp!
- Setup Dev Environment
- Hello World
- Create a Server Project
- Handle Client Requests
- Using ezyfox-server-csharp-client
- Using ezyfox-es6-client
- Client React.js Interaction
- Build And Deploy In Local