Khi bạn cho rằng C hoạt động như một đối thủ, đang nghe lén và có khả năng xây dựng các thông báo dựa trên thông tin thu được, bạn phải thiết kế giao thức của mình một cách cẩn thận. Điều này xuất phát từ thực tế là C có khả năng chuyển tiếp, phát lại và xây dựng các thông điệp. Do đó, bạn cần ngăn chặn các cuộc tấn công phát lại và tấn công trung gian, hơn nữa xử lý cho nhiều phiên giao thức (đồng thời).
Bạn đã nhận ra rằng chữ ký tĩnh có thể không đủ. Về cơ bản, vấn đề của bạn là động lực cho các giao thức xác thực và thiết kế của chúng không hề tầm thường: nếu bạn xem qua giao thức NeedhamâSchroeder 1 hoặc giao thức Woo-Lam 2 bạn sẽ thấy rằng các vectơ tấn công không lường trước có thể phá vỡ giao thức của bạn vì cả hai ví dụ đều không an toàn trong phiên bản gốc của chúng.
Về cơ bản, một số phương pháp hay nhất để thiết kế giao thức an toàn là:
- Đưa ra giả định bi quan tối đa
- Đặt người gửi và người nhận trong tin nhắn (tức là khóa công khai của họ)
- Sử dụng mã hóa để đảm bảo rằng chỉ người nhận chính xác mới có thể đọc nội dung
- Sử dụng nonces/dấu thời gian để có được sự tươi mới
- Tự tạo nonces để ngăn chặn các cuộc tấn công phát lại
- Luôn ký và mã hóa các thành phần cùng nhau
Tuy nhiên: có những giao thức được coi là an toàn không tuân theo tất cả các điểm và các giao thức không an toàn thì có.
Trong mọi trường hợp, bạn sẽ muốn phân tích giao thức của mình (bán) tự động bằng cách sử dụng ví dụ kiểm tra mô hình hoặc chứng minh định lý.