Sử dụng chữ ký là một cách thức để giao thức chuyển vận xác thực nguồn gốc dữ liệu cho bên nhận. Giao thức có thể thực hiện ký trên khóa rồi mã hóa, hoặc mã hóa xong rồi ký, hoặc ký và mã hóa riêng.
Ta ký hiệu SU(y), PV(y) là chữ ký trên y dùng khóa bí mật của U, và mã khóa công khai trên y dùng khóa của V.
2.4.2.1. Ký trên khóa rồi thực hiện mã hóa
• Giao thức
tU là tem thời gian do U chọn (dấu * để chỉ giá trị không bắt buộc phải có trong gói tin giao thức)
• Vấn đề an toàn của giao thức
Nếu có tU việc xác thực U với V thuận tiện hơn, ngoài ra nó cũng đảm bảo tính mới của khóa. Danh tính của V được đưa vào trong văn bản ký nhằm ngăn chặn không cho V đóng giả U gửi cho người khác.
So với phương pháp mã hóa xong rồi ký mà ta sẽ nói đến ngay sau đây thì phương pháp này có nhược điểm là dữ liệu để mã hóa thường lớn hơn, vì thế có thể phải điều chỉnh kích thước khối trong sơđồ mã hóa công khai. (sử dụng CBC [6])
Nếu thuật toán ký khả nghịch tức là từ chữ ký có thể thu được văn bản gốc, U chỉ cần chuyển cho V:
U→V: PV(SU(V || k || tU*))
2.4.2.2. Mã hóa và ký riêng
• Giao thức
Với những sơđồ ký không cho phép xác định bản rõ từ chữ ký, thay vì mã hóa trên chữ ký, ta sẽ thực hiện ký trên khóa và mã hóa khóa riêng biệt. Văn bản của giao thức có dạng:
U→V: PV(k || tU*), SU(V || k || tU*)
Nếu khóa k chỉ dùng để mã hóa tệp dữ liệu y nào đó, thì thay cho k ta sẽ dùng SU(V || Ek(y) || tU*). Giao thức này rất phù hợp với các ứng dụng lưu và chuyển tiếp: dữ liệu y cùng với thông tin về khóa được chuyển cho bên kia, bên nhận thu được y bằng cách sử dụng k để giải mã tệp sau đó mới kiểm thử chữ ký trên y.
2.4.2.3. Mã hóa khóa rồi ký
• Giao thức
Ngược lại với cách ký trên bản mã khóa, U muốn chuyển cho V khóa k có thể gửi gói tin như sau:
U→V: tU*, PV(U || k), SU(V || tU* || PV(U || k))
Thông tin về V được đưa vào trong phần ký để chống lại việc lột bỏ (stripping) chữ ký – không cho phép kẻ tấn công W nào đó lấy được giá trị PV(k) rồi ký đè lên bằng khóa của mình. Hơn nữa, khi chọn thuật toán mã hóa, lưu ý rằng nó phải đảm bảo W không thể thay đổi PV(U || k) thành PV(W || k).
• Tính an toàn của giao thức
Bằng cách dùng tem thời gian, giao thức cho phép các bên xác thực lẫn nhau.