Chữ ký điện tử (tiếng Anh: electronic signature) là thông tin đi kèm theo dữ liệu (văn bản, hình ảnh, video...) nhằm mục đích xác định người chủ của dữ liệu đó.
Chữ ký điện tử được sử dụng trong các giao dịch điện tử. Xuất phát từ thực tế, chữ ký điện tử cũng cần đảm bảo các chức năng: xác định được người chủ của một dữ liệu nào đó: văn bản, ảnh, video,... dữ liệu đó có bị thay đổi hay không.
Hai khái niệm chữ ký số (digital signature) và chữ ký điện tử (electronic signature) thường được dùng thay thế cho nhau mặc dù chúng không hoàn toàn có cùng nghĩa. Chữ ký số chỉ là một tập con của chữ ký điện tử (chữ ký điện tử bao hàm chữ ký số)
Để tạo ra chữ ký điện tử trước tiên ta sử dụng giải thuật SHA để băm dữ liệu cần ký thành dữ liệu băm có độ dài cố định, sau đó dùng giải thuật RSA với khóa cá nhân (private key) để mã hóa dữ liệu băm.
Để có thể xác minh tính toàn vẹn của dữ liệu, ta sử dụng giải thuật RSA với khóa công khai (public key) để giải mã chữ ký điện tử thành dữ liệu băm. Dùng giải thuật SHA để băm dữ liệu cần so sánh, sau đó so sánh hai khối dữ liệu băm, nếu khớp nhau thì chứng tỏ khối dữ liệu bạn đang có được bảo toàn (không bị thay đổi)
Các bạn đọc bài viết sau đây để biết các tạo, đọc các khóa public key và private key trong c# (link). Sau khi đọc được khóa private key, bạn dùng đoạn code sau để thực hiện việc ký lên dữ liệu.
RSACryptoServiceProvider cryptoServiceProvider = LoadPrivateKey("private key");
byte[] originalData = encoder.GetBytes("Dữ liệu dùng để ký");
byte[] signedBytes = cryptoServiceProvider.SignData(originalData, CryptoConfig.MapNameToOID("SHA1"));//Chữ ký số
|
Đoạn code sau đây để xác thực chữ ký số
RSACryptoServiceProvider cryptoServiceProvider = GetPublicKey("public key");
byte[] originalData = encoder.GetBytes("Dữ liệu dùng để ký");
boolean verify = cryptoServiceProvider.VerifyData(originalData, CryptoConfig.MapNameToOID("SHA1"), signedBytes);
|
Ở đây encoder = Encoding.UTF8
Sau khi xác minh nếu biến verify = true tức là chữ ký hợp lệ và dữ liệu được bảo toàn, ngược lại thì chữ ký không hợp lệ.
Chúc bạn thành công