Vẻ đẹp của chữ ký phần mềm

Tác giả ChatGPT, T.Mười 05, 2024, 02:30:24 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Hãy tưởng tượng bạn là một nhà phát triển phần mềm và bạn chia sẻ phần mềm hoặc các bản cập nhật của mình trên internet. Làm thế nào để đảm bảo rằng không ai can thiệp vào phần mềm của bạn và phân phối bản sao đã can thiệp đó cho khách hàng của bạn? Giải pháp là chữ ký phần mềm. Cách thức hoạt động của các chữ ký này vô cùng thông minh và hấp dẫn.


1. Chữ ký phần mềm là gì?

Chúng tôi sử dụng chữ ký viết tay để tự nhận dạng vì hai lý do: chúng được cho là có thể xác minh được và không thể làm giả. Nguyên tắc tương tự cũng áp dụng khi bạn cố gắng đảm bảo rằng bản sao của một phần mềm trên máy tính của bạn là xác thực và không bị sửa đổi theo bất kỳ cách nào. Nhà phát triển sẽ để lại chữ ký số trên gói phần mềm (không thể làm giả) và khách hàng xác minh chữ ký đó trong bản sao của họ trước khi cài đặt phần mềm.

Điều này cũng áp dụng cho các bản cập nhật phần mềm. Một bản cập nhật độc hại (ví dụ như phần mềm độc hại được ngụy trang thành trình điều khiển) có thể gây ra sự tàn phá cho máy của bạn. Hệ điều hành của bạn (có thể là Windows, macOS hoặc Linux) cần xác minh rằng bản cập nhật đến từ nguồn gốc trước khi cài đặt vào hệ thống.

Chữ ký số được thiết kế để thực hiện hai công việc giống như chữ ký viết tay, nhưng cách chúng thực sự hoạt động không thể khác hơn. Cần một số thủ thuật mật mã thực sự thông minh để tạo và xác minh chữ ký số.

2. Làm thế nào để ẩn một tin nhắn bí mật ở nơi dễ thấy?

Giả sử, bạn muốn chia sẻ một bí mật với một người bạn qua những ghi chú viết tay. Trong trường hợp này, bạn cũng phải để chúng ở nơi công cộng để bạn của bạn có thể lấy chúng sau. Bất kỳ ai đi ngang qua cũng có thể lấy ghi chú và đọc bí mật của bạn. Vậy đó là vấn đề của chúng ta: làm sao để đảm bảo chỉ có bạn của bạn mới có thể đọc được tin nhắn, ngay cả khi có người rình mò lấy được ghi chú?

Một cách thông minh là sử dụng "chìa khóa" để khóa và mở khóa bí mật chung này. Cho phép tôi giải thích.

Cả bạn và bạn của bạn đều đồng ý về một chìa khóa, và bạn sử dụng chìa khóa đó để chuyển đổi tin nhắn bí mật của mình thành tiếng ồn vô nghĩa. Chìa khóa có thể là bất cứ thứ gì. Ví dụ, hai bạn có thể đồng ý thay thế mọi chữ cái của tin nhắn bằng chữ cái ngay bên cạnh nó trong bảng chữ cái.

Sau đó, bạn sẽ lấy tin nhắn của mình và thay thế mọi chữ cái trong đó theo khóa. Vì vậy, tin nhắn "SECRET" trở thành "TFDSFU". Bạn viết "TFDSFU" trên một tờ giấy và để nó ở nơi công cộng. Bạn của bạn có thể giải mã nó vì họ có khóa mà cả hai bạn đã trao đổi trước đó. Vì vậy, tất cả những gì họ phải làm là dịch chuyển từng chữ cái đến một vị trí trong "TFDSFU" và họ sẽ nhận được tin nhắn gốc "SECRET". Bất kỳ kẻ nghe lén nào cũng sẽ chỉ thấy vô nghĩa vì trước tiên họ cần có khóa để hiểu tin nhắn.

Những gì chúng tôi vừa mô tả ở đây là một kỹ thuật mã hóa rất đơn giản và khóa mà nó sử dụng là mật mã Caesar cơ bản.

3. Máy tính gửi tin nhắn bí mật qua Internet như thế nào?

Bây giờ hãy tưởng tượng nếu bạn đang làm điều tương tự trên internet và bạn muốn giao tiếp của mình hoàn toàn an toàn. Trong thế giới thực, bạn có thể gặp nhau trước và trao đổi khóa với nhau. Bạn không thể trao đổi khóa như vậy trên internet vì đó là không gian công cộng. Bất kỳ ai cũng có thể lấy được khóa đó và sử dụng nó để giải mã phần còn lại của giao tiếp của bạn. Vậy, làm thế nào để trao đổi khóa mà không chia sẻ nó với bạn bè của bạn?

Vì vậy, bạn cần một khóa để giao tiếp an toàn, nhưng trước tiên bạn cần giao tiếp khóa một cách an toàn. Đây là cách bạn khiến hai máy tính đồng ý về cùng một khóa mà không cần gửi khóa đó qua internet.

Không cần đi sâu vào kỹ thuật, mã hóa hoạt động với các phương trình toán học dễ giải theo một hướng, nhưng cực kỳ khó (hoặc thậm chí không thể) giải theo hướng ngược lại. Vì vậy, nếu máy tính có phương trình với tất cả các con số phù hợp đi vào, nó có thể giải phương trình đó một cách dễ dàng. Tuy nhiên, nó không thể đảo ngược kỹ thuật của chính phương trình đó nếu được cung cấp lời giải.

Tôi đang đơn giản hóa quá mức ở đây, nếu không chúng ta sẽ ở đây cả ngày. Nếu bạn muốn tìm hiểu sâu hơn về cách thức hoạt động của nó, hãy xem xét trao đổi khóa Diffie-Hellman.

Đây là kịch bản: có một máy tính A, một máy tính B và một không gian công cộng. Nó bắt đầu bằng một khóa được gửi đến không gian công cộng (gọi là khóa công khai). Máy tính A tạo một khóa khác và giữ khóa đó ở chế độ riêng tư (gọi là khóa riêng A). Máy tính B cũng làm như vậy.

Khóa công khai có sẵn cho mọi người, nhưng khóa riêng A và khóa riêng B được lưu giữ an toàn trên máy tính của mỗi người.

Bây giờ máy tính A lấy khóa công khai và kết hợp nó với khóa riêng của nó để tạo ra một tổ hợp. Máy tính B cũng làm như vậy với khóa riêng của nó. Cả hai tổ hợp đều khác nhau. Thay vì gửi khóa riêng của chúng đến không gian công cộng, các máy tính gửi các tổ hợp này ra ngoài đó.

Hãy nhớ rằng không thể đảo ngược các kết hợp này để tìm ra khóa riêng được sử dụng để tạo ra chúng. Và không có lúc nào, hai máy tính nhìn thấy khóa riêng của nhau.

Bây giờ là thủ thuật thực tế. Mỗi máy tính lấy tổ hợp mà máy kia gửi đến không gian công cộng. Sau đó, máy tính A thêm khóa riêng của mình vào tổ hợp đó với khóa riêng của mình để có được khóa cuối cùng. Máy tính kia cũng làm như vậy với khóa riêng của mình và có được khóa cuối cùng chính xác giống như máy tính A đã tạo.

Bây giờ cả hai máy tính đều có cùng một khóa mà chúng có thể sử dụng để mã hóa và giải mã mọi giao tiếp trong tương lai. Đây là câu trả lời đơn giản hóa quá mức: hai máy tính "tạo" bản sao khóa riêng của chúng mà không thực sự chia sẻ khóa đó.

Toàn bộ quá trình này được gọi là mật mã khóa công khai. Loại mật mã khóa công khai này là cơ sở cho chữ ký số như chữ ký phần mềm.

4. Cách các nhà phát triển ẩn chữ ký bí mật trong mã của họ

Việc ký phần mềm kỹ thuật số cũng liên quan đến khóa công khai và khóa riêng. Tuy nhiên, mục đích thì khác nhau, nên hoạt động bên trong cũng hơi khác một chút. Ý tưởng ở đây không phải là thiết lập một đường truyền thông tin an toàn. Chúng tôi chỉ muốn xác minh một chiều. Nhà phát triển phần mềm không cố gắng che giấu nội dung của gói phần mềm. Họ chỉ quan tâm đến việc chứng minh nguồn gốc của gói.

Vì vậy, nhà phát triển tạo ra một cặp khóa riêng tư và công khai. Hãy nhớ rằng cả hai khóa này đều khác nhau, nhưng chúng có liên quan về mặt toán học và không thể đảo ngược kỹ thuật khóa này từ khóa kia.

Nhà phát triển sử dụng khóa riêng của họ để mã hóa gói phần mềm. Bản sao được mã hóa đó chỉ có thể được giải mã bằng khóa công khai mà họ đã công bố trên internet. Vì vậy, khi bạn và tôi sử dụng khóa công khai để giải mã bản sao đó, chúng ta có thể hoàn toàn chắc chắn rằng nó được gửi bởi nhà phát triển vì họ chỉ có khóa riêng có thể đã mã hóa gói phần mềm của họ ban đầu.

4.1. Hashes làm cho công việc dễ dàng hơn

Được rồi, vậy là tôi đã nói dối một chút. Thực sự không thực tế khi mã hóa toàn bộ các gói phần mềm vì các tệp này có thể trở nên khá lớn. Có một cách thông minh khác để giải quyết vấn đề đó thông qua các hàm băm. Các hàm băm là các công thức toán học tạo ra một độ dài cố định các chữ số và chữ cái từ một tệp có bất kỳ kích thước nào.

Ví dụ, hàm băm SHA256 sẽ lấy bất kỳ tệp nào và đưa ra danh sách gồm 256 chữ số và chữ cái. Nếu tệp đó thay đổi dù chỉ một bit, nó sẽ tạo ra một kết quả hoàn toàn khác. Vì vậy, nhà phát triển sẽ chạy gói phần mềm thông qua hàm SHA256 để tạo tệp văn bản. Và thay vì mã hóa toàn bộ gói, họ chỉ mã hóa tệp văn bản này bằng khóa riêng (như tôi đã giải thích ở trên). Họ đính kèm văn bản băm được mã hóa vào gói phần mềm và gửi cho chúng tôi.

Khi bạn và tôi nhận được gói phần mềm, chúng ta cũng sẽ chạy nó qua SHA256 để có được danh sách băm của riêng mình. Sau đó, chúng ta sẽ giải mã tin nhắn được mã hóa kèm theo gói phần mềm bằng khóa công khai mà nhà phát triển cung cấp. Nếu danh sách băm được giải mã khớp với danh sách chúng ta tạo ra ở phía mình, chúng ta có thể hoàn toàn chắc chắn rằng gói này đến từ nhà phát triển và không bị can thiệp. Bất kỳ sự can thiệp nào vào gói trong quá trình vận chuyển sẽ dẫn đến một văn bản băm hoàn toàn khác. Các tệp văn bản này được gọi là checksum.

Nói một cách ngắn gọn, đó chính xác là chữ ký phần mềm: hàm băm được mã hóa và khóa công khai. Chữ ký số hoạt động vì nó không thể làm giả (khóa riêng đảm bảo điều đó) và có thể xác minh được (khóa công khai liên quan có thể giải mã thông điệp).

4.2. Ai là người theo dõi những người theo dõi?

Nếu bạn chú ý, bạn có thể nhận thấy hệ thống này vẫn còn một lỗi mà chúng ta chưa giải quyết.

Điều gì xảy ra nếu ai đó lấy một bản sao của gói phần mềm, làm hỏng nó, tạo một tổng kiểm tra mới và sử dụng một cặp khóa mới để mã hóa nó? Kẻ đe dọa đó có thể phát tán khóa công khai liên quan hoặc gửi trực tiếp cho chúng tôi. Chúng tôi sẽ giải mã chữ ký bị giả mạo bằng khóa công khai vì nghĩ rằng các hàm băm khớp nhau nên nó phải đến từ tác giả gốc. Nhưng khóa công khai mà chúng tôi sử dụng lại đến từ kẻ mạo danh.

Đó là lúc các cơ quan chứng nhận vào cuộc. Một tổ chức đáng tin cậy như vậy sẽ kiểm tra các nhà phát triển và cấp cho họ các chứng chỉ kỹ thuật số được liên kết với khóa công khai của họ. Nó ký chứng chỉ bằng mật mã giống như nhà phát triển làm cho chúng tôi và một cơ quan chứng nhận thậm chí còn cao hơn sẽ xác nhận chữ ký của tổ chức này. Đó là các tổ chức chứng nhận cho đến tận cùng.

Các chứng chỉ này có giá trị ràng buộc về mặt pháp lý và chúng tôi có thể tự mình xác minh để hoàn toàn chắc chắn rằng chúng tôi có đúng khóa công khai.

Tất cả những thứ này tự động xảy ra ở chế độ nền vì máy tính sẽ xử lý băm, mã hóa và xác minh. Chúng ta chỉ thấy hộp thoại yêu cầu chúng ta cấp quyền cài đặt ứng dụng hoặc cập nhật. Nếu ứng dụng chưa được ký, hệ điều hành sẽ cảnh báo chúng ta trước khi cài đặt.