Code Signing hoạt động như thế nào? Quy trình ký và xác minh chữ ký số

Code Signing hoạt động như thế nào? Quy trình ký và xác minh chữ ký số

Cập nhật lần cuối: 10/09/2026

Tìm hiểu Code Signing hoạt động như thế nào, từ tạo hash, ký bằng private key, gắn chữ ký vào file đến quá trình Windows xác minh certificate, chữ ký và tính toàn vẹn của phần mềm.

Code Signing hoạt động như thế nào?

Code Signing là cơ chế sử dụng chữ ký số để xác minh nguồn gốctính toàn vẹn của phần mềm hoặc mã nguồn đã được ký. Trên Windows, Code Signing thường được sử dụng cho các file như EXE, DLL, MSI, CAB và một số thành phần phần mềm khác.

Quá trình Code Signing sử dụng cặp khóa mật mã gồm Private KeyPublic Key. Private Key được sử dụng để tạo chữ ký số, trong khi Public Key nằm trong Code Signing Certificate và được sử dụng để xác minh chữ ký.

Về cơ bản, quy trình có thể được mô tả như sau:

Software
   │
   ▼
Create Hash
   │
   ▼
Sign Hash with Private Key
   │
   ▼
Digital Signature
   │
   ▼
Attach Signature to File
   │
   ▼
Signed Software

Khi người dùng nhận được phần mềm, hệ điều hành hoặc công cụ xác minh sẽ kiểm tra chữ ký để xác định file có bị thay đổi hay không và certificate dùng để ký có được tin cậy hay không.

Code Signing không mã hóa toàn bộ phần mềm. Mục đích chính của nó là xác minh nguồn gốc và phát hiện thay đổi đối với nội dung đã được ký.


Xem thêm: Code Signing là gì?


Code Signing sử dụng những thành phần nào?

Để hiểu Code Signing hoạt động như thế nào, cần hiểu vai trò của các thành phần tham gia vào quá trình ký và xác minh.

Thành phần Vai trò
Private Key Dùng để tạo chữ ký số.
Public Key Dùng để xác minh chữ ký.
Code Signing Certificate Liên kết danh tính của chủ thể với Public Key.
Hash Đại diện cho nội dung của file tại thời điểm ký.
Digital Signature Chữ ký được tạo từ dữ liệu hash và Private Key.
Certificate Authority Cấp và xác thực Code Signing Certificate.
Timestamp Server Ghi nhận thời điểm chữ ký được tạo.

Private Key và Public Key trong Code Signing

Code Signing sử dụng mật mã khóa công khai, trong đó một cặp khóa được tạo ra gồm Private Key và Public Key.

Private Key phải được bảo vệ bí mật vì đây là thành phần được sử dụng để tạo chữ ký số.

Public Key có thể được phân phối công khai và thường được chứa trong Code Signing Certificate.

Mối quan hệ có thể hình dung như sau:

Private Key
     │
     │ Sign
     ▼
Digital Signature

Public Key
     │
     │ Verify
     ▼
Digital Signature

Người ký sử dụng Private Key để tạo chữ ký. Người nhận không cần biết Private Key mà sử dụng Public Key để xác minh chữ ký.


Xem thêm: Public Key và Private Key là gì?


Bước 1: Build phần mềm

Quá trình Code Signing thường bắt đầu sau khi phần mềm đã được build hoàn chỉnh.

Ví dụ một ứng dụng có thể tạo ra:

Release\
├── Application.exe
├── Updater.exe
├── Core.dll
├── Network.dll
└── Installer.msi

Các file cần ký phải được hoàn thiện trước khi thực hiện Code Signing. Nếu nội dung file tiếp tục thay đổi sau khi ký, chữ ký có thể không còn hợp lệ.

Do đó, Code Signing thường được đặt ở giai đoạn cuối của quy trình build và trước khi phát hành phần mềm.

Bước 2: Tạo Hash của file

Thay vì ký trực tiếp toàn bộ nội dung file bằng thuật toán khóa công khai, hệ thống sẽ tạo một giá trị hash đại diện cho nội dung cần ký.

Ví dụ:

Software File
     │
     ▼
SHA-256
     │
     ▼
Hash Value

Hash là một chuỗi dữ liệu có độ dài cố định được tạo từ nội dung đầu vào.

Nếu nội dung file thay đổi, giá trị hash tương ứng cũng sẽ thay đổi.

File A
   │
   ▼
SHA-256
   │
   ▼
Hash A

File A + 1 byte changed
   │
   ▼
SHA-256
   │
   ▼
Hash B

Chính đặc tính này giúp chữ ký số có thể phát hiện việc nội dung file bị thay đổi sau khi ký.

Bước 3: Ký Hash bằng Private Key

Sau khi tạo hash, hệ thống sử dụng Private Key để tạo chữ ký số.

Hash
  │
  ▼
Private Key
  │
  ▼
Digital Signature

Private Key không được đưa vào file để người dùng có thể truy cập. Nó chỉ được sử dụng trong quá trình tạo chữ ký.

Trong các hệ thống yêu cầu mức bảo mật cao, Private Key có thể được lưu trữ trong Hardware Token, HSM hoặc hệ thống ký số chuyên dụng.

Bước 4: Gắn chữ ký vào phần mềm

Sau khi tạo Digital Signature, chữ ký và các thông tin certificate liên quan sẽ được gắn vào file theo cơ chế mà định dạng file hỗ trợ.

Đối với Windows Authenticode, chữ ký được lưu trong cấu trúc chữ ký của file.

Có thể hình dung:

Original File
     │
     ├── Original Content
     │
     └── Digital Signature
              │
              ├── Certificate
              └── Signature Data
                     │
                     ▼
                Signed File

File sau khi ký vẫn có thể được phân phối như một file phần mềm thông thường, nhưng có thêm thông tin chữ ký để hệ điều hành hoặc công cụ xác minh có thể kiểm tra.

Code Signing Certificate có vai trò gì?

Digital Signature chỉ giải quyết một phần của bài toán xác minh. Người nhận còn cần biết Public Key thuộc về ai.

Đây là vai trò của Code Signing Certificate.

Certificate chứa Public Key và các thông tin nhận dạng của chủ thể được cấp certificate. Certificate được CA ký để tạo thành một chuỗi tin cậy.

Mô hình cơ bản:

Certificate Authority
        │
        ▼
Code Signing Certificate
        │
        ├── Subject Information
        ├── Public Key
        ├── Validity
        └── CA Signature
              │
              ▼
       Signed Software

Nhờ Certificate, hệ thống có thể liên kết chữ ký số với danh tính của chủ thể được chứng thực.


Xem thêm: Code Signing Certificate dùng để làm gì? 


Bước 5: Người dùng tải phần mềm

Sau khi phần mềm được ký, file có thể được phân phối cho người dùng thông qua website, CDN, hệ thống cập nhật hoặc các kênh phân phối phần mềm khác.

Ví dụ:

Developer
    │
    ▼
Build Software
    │
    ▼
Code Signing
    │
    ▼
Release Server
    │
    ▼
User Downloads File

Tại thời điểm người dùng tải file, hệ điều hành có thể kiểm tra chữ ký trước hoặc trong quá trình người dùng thực thi file.

Bước 6: Windows xác minh chữ ký

Khi người dùng mở hoặc cài đặt phần mềm, Windows có thể kiểm tra chữ ký Authenticode của file.

Quá trình xác minh có thể được mô tả:

Signed File
    │
    ▼
Read Digital Signature
    │
    ├── Certificate
    ├── Public Key
    └── Signature Data
    │
    ▼
Calculate File Hash
    │
    ▼
Verify Signature
    │
    ▼
Check Certificate Trust
    │
    ▼
Result

Hệ thống sẽ kiểm tra nhiều yếu tố khác nhau thay vì chỉ kiểm tra sự tồn tại của chữ ký.

Bước 7: Tính lại Hash của file

Để xác định file có bị thay đổi hay không, hệ thống sẽ tính lại hash của phần nội dung cần xác minh.

Signed File
    │
    ▼
Calculate SHA-256
    │
    ▼
Current Hash

Giá trị hash này được so sánh với thông tin được bảo vệ trong chữ ký.

Nếu nội dung file đã bị thay đổi sau khi ký, giá trị hash sẽ không còn phù hợp và quá trình xác minh chữ ký sẽ phát hiện ra sự khác biệt.

Bước 8: Xác minh chữ ký bằng Public Key

Public Key trong Code Signing Certificate được sử dụng để xác minh Digital Signature.

Digital Signature
       │
       ▼
Public Key
       │
       ▼
Signature Verification
       │
       ├── Valid
       │
       └── Invalid

Nếu chữ ký hợp lệ, hệ thống tiếp tục kiểm tra các thành phần khác như certificate và chuỗi tin cậy.

Nếu chữ ký không hợp lệ, quá trình xác minh sẽ thất bại.

Bước 9: Kiểm tra Certificate Chain

Windows không chỉ kiểm tra Code Signing Certificate mà còn phải xác định certificate đó có nằm trong một chuỗi tin cậy hay không.

Certificate Chain thường có cấu trúc:

Root CA
   │
   ▼
Intermediate CA
   │
   ▼
Code Signing Certificate
   │
   ▼
Signed Software

Hệ điều hành sử dụng Trusted Root Certificate Store để xác định Root CA có được tin cậy hay không.

Nếu Certificate Chain hợp lệ và Root CA được tin cậy, certificate có thể được xác nhận là thuộc một chuỗi tin cậy.


Xem thêm: Certificate Chain là gì?


Bước 10: Kiểm tra thời hạn của Certificate

Code Signing Certificate có thời hạn sử dụng. Hệ thống có thể kiểm tra thời gian hiệu lực của certificate trong quá trình xác minh.

Certificate thường chứa:

Not Before
    │
    ▼
Certificate Validity
    │
    ▼
Not After

Tuy nhiên, việc certificate hiện tại đã hết hạn không nhất thiết đồng nghĩa với việc một chữ ký được tạo trong thời gian certificate còn hiệu lực sẽ luôn bị coi là không hợp lệ. Timestamp có thể cung cấp bằng chứng về thời điểm chữ ký được tạo.

Timestamp hoạt động như thế nào trong Code Signing?

Timestamp được sử dụng để chứng minh thời điểm chữ ký được tạo.

Thay vì chỉ có:

Signed File
    │
    ▼
Digital Signature

quy trình có thể bổ sung Timestamp Authority:

Signed File
    │
    ▼
Digital Signature
    │
    ▼
Timestamp Request
    │
    ▼
Timestamp Authority
    │
    ▼
Timestamp Token
    │
    ▼
Signed File + Timestamp

Timestamp Authority xác nhận thời điểm liên quan đến chữ ký dựa trên cơ chế timestamp được sử dụng.

Điều này đặc biệt quan trọng đối với việc duy trì khả năng xác minh chữ ký sau khi Code Signing Certificate hết hạn.


Xem thêm: Timestamp trong Code Signing là gì?


Code Signing có mã hóa phần mềm không?

Không. Code Signing và mã hóa là hai cơ chế khác nhau.

Đặc điểm Code Signing Encryption
Mục đích Xác minh nguồn gốc và tính toàn vẹn Bảo vệ nội dung khỏi việc đọc trái phép
Khóa sử dụng Private Key và Public Key Tùy mô hình có thể dùng khóa đối xứng hoặc bất đối xứng
File có thể chạy bình thường Không nếu nội dung chưa được giải mã
Phát hiện thay đổi Không phải mục tiêu chính

Code Signing không nhằm che giấu source code hoặc nội dung của file. Người dùng vẫn có thể tải và phân tích phần mềm đã được ký.

Code Signing bảo vệ phần mềm khỏi bị thay đổi như thế nào?

Giả sử một file được ký có nội dung ban đầu:

Application.exe
       │
       ▼
SHA-256
       │
       ▼
Hash A
       │
       ▼
Sign with Private Key
       │
       ▼
Digital Signature

Nếu kẻ tấn công thay đổi nội dung file:

Application.exe
       │
       ▼
Modified File
       │
       ▼
SHA-256
       │
       ▼
Hash B

Trong trường hợp Hash AHash B không khớp, chữ ký không thể xác minh như đối với file ban đầu.

Đây là cơ chế giúp Code Signing phát hiện những thay đổi trái phép đối với file sau khi ký.

Code Signing có ngăn malware hay không?

Code Signing không phải là giải pháp chống malware.

Chữ ký hợp lệ cho biết file đã được ký bằng một Private Key tương ứng với certificate và nội dung được xác minh phù hợp với chữ ký tại thời điểm kiểm tra. Tuy nhiên, điều này không đảm bảo phần mềm không chứa mã độc.

Ví dụ, nếu Private Key của một nhà phát triển bị đánh cắp, kẻ tấn công có thể sử dụng khóa đó để ký phần mềm độc hại.

Do đó, Code Signing cần được kết hợp với:

  • Endpoint Security.
  • Malware Detection.
  • Application Security Testing.
  • Software Supply Chain Security.
  • Kiểm soát quyền truy cập Private Key.
  • Giám sát và quản lý certificate.

Code Signing trên Windows sử dụng Authenticode

Đối với hệ sinh thái Windows, Authenticode là công nghệ được sử dụng để xác thực nguồn gốc và tính toàn vẹn của phần mềm đã ký.

Quy trình tổng quát:

Windows Application
       │
       ▼
Authenticode Signature
       │
       ├── Signed Hash
       ├── Code Signing Certificate
       └── Certificate Chain
       │
       ▼
Windows Verification
       │
       ▼
Trust / Signature Result

SignTool là một trong những công cụ phổ biến được sử dụng để tạo và kiểm tra chữ ký Authenticode.


Xem thêm: SignTool là gì?


Ví dụ quy trình Code Signing thực tế

Giả sử developer vừa build một ứng dụng Windows có file:

Release\
├── App.exe
├── Updater.exe
├── Core.dll
└── Installer.msi

Quy trình Code Signing có thể được thực hiện như sau:

Build
  │
  ▼
App.exe / Updater.exe / Core.dll / Installer.msi
  │
  ▼
Calculate Hash
  │
  ▼
Sign with Private Key
  │
  ▼
Attach Digital Signature
  │
  ▼
Add Timestamp
  │
  ▼
Signed Files
  │
  ▼
Verify Signature
  │
  ▼
Release

Trong quy trình này, Private Key được sử dụng để ký nhưng không được phân phối cùng phần mềm.

Verify Code Signing bằng SignTool

Sau khi ký, có thể sử dụng SignTool để kiểm tra chữ ký.

Ví dụ:

signtool verify /pa "App.exe"

Để hiển thị thông tin chi tiết:

signtool verify /pa /v "App.exe"

Đối với nhiều file EXE:

for %f in (*.exe) do signtool verify /pa "%f"

Việc verify giúp xác nhận rằng các file trong release package đã được ký và chữ ký có thể được hệ thống xác minh.


Xem thêm: Verify chữ ký bằng SignTool


Private Key được bảo vệ như thế nào?

Private Key là thành phần quan trọng nhất trong quy trình Code Signing. Nếu Private Key bị lộ, người khác có thể sử dụng nó để tạo chữ ký giả mạo dưới danh tính của chủ sở hữu certificate.

Private Key có thể được bảo vệ bằng nhiều phương pháp:

  • Hardware Token.
  • Hardware Security Module.
  • Cloud-based Signing Service.
  • Secure Key Storage.
  • Access Control.
  • Multi-factor Authentication.

Đối với môi trường doanh nghiệp, private key không nên được lưu trữ tùy tiện trên máy build hoặc đưa trực tiếp vào source code.

Code Signing trong CI/CD

Code Signing có thể được tích hợp vào CI/CD để tự động hóa quy trình phát hành phần mềm.

Một pipeline có thể được thiết kế:

Source Code
     │
     ▼
Build
     │
     ▼
Automated Tests
     │
     ▼
Code Signing
     │
     ▼
Timestamp
     │
     ▼
Verify Signature
     │
     ▼
Package
     │
     ▼
Release

Cách triển khai này giúp đảm bảo các file được ký trước khi phát hành và giảm nguy cơ bỏ sót Code Signing trong quá trình release.

Điều gì xảy ra nếu file bị thay đổi sau khi ký?

Nếu nội dung file được thay đổi sau khi ký, giá trị hash của file sẽ thay đổi.

Quá trình xác minh khi đó có thể phát hiện sự khác biệt:

Original Hash
      │
      │ Compare
      ▼
Current File Hash
      │
      ├── Match → Signature Valid
      │
      └── Different → Verification Failed

Do đó, không nên chỉnh sửa, patch hoặc thay đổi nội dung file sau khi hoàn tất Code Signing.

Code Signing hoạt động khác gì so với SSL/TLS?

Code Signing và SSL/TLS đều sử dụng chứng thư số và mật mã khóa công khai nhưng phục vụ những mục đích khác nhau.

Tiêu chí Code Signing SSL/TLS
Mục đích chính Xác minh phần mềm Bảo vệ kết nối mạng
Đối tượng bảo vệ File / Software Kết nối giữa client và server
Certificate Code Signing Certificate TLS/SSL Certificate
Chức năng chính Xác minh nguồn gốc và tính toàn vẹn Mã hóa và xác thực kết nối

Vì vậy, một website có HTTPS không đồng nghĩa các file phần mềm được tải xuống từ website đó đã được Code Signing.

Lưu ý khi triển khai Code Signing

  • Private Key phải được bảo vệ nghiêm ngặt.
  • Chỉ ký file sau khi quá trình build đã hoàn tất.
  • Không thay đổi nội dung file sau khi ký.
  • Sử dụng thuật toán hash phù hợp như SHA-256.
  • Sử dụng timestamp trong quy trình ký khi phù hợp.
  • Kiểm tra Certificate Chain và trạng thái certificate.
  • Verify chữ ký trước khi phát hành phần mềm.
  • Đưa Code Signing vào quy trình CI/CD nếu cần tự động hóa.
  • Theo dõi thời hạn và trạng thái của Code Signing Certificate.

Kết luận

Code Signing hoạt động dựa trên sự kết hợp giữa hash, mật mã khóa công khai, Digital Signature và Code Signing Certificate. Khi ký phần mềm, hệ thống tạo hash của file rồi sử dụng Private Key để tạo chữ ký. Chữ ký, certificate và các thông tin liên quan được gắn vào file để phục vụ quá trình xác minh.

Khi người dùng nhận phần mềm, Windows hoặc công cụ xác minh sẽ kiểm tra chữ ký, tính toàn vẹn của file, Public Key, Certificate Chain và trạng thái tin cậy của certificate. Timestamp có thể bổ sung bằng chứng về thời điểm chữ ký được tạo và hỗ trợ quá trình xác minh chữ ký trong thời gian dài hơn.

Code Signing không mã hóa phần mềm và cũng không đảm bảo file hoàn toàn không chứa mã độc. Tuy nhiên, đây là một thành phần quan trọng trong bảo mật phần mềm, giúp người dùng và hệ điều hành xác định nguồn gốc của phần mềm và phát hiện những thay đổi trái phép đối với file sau khi ký.


Xem thêm: Ký nhiều file bằng SignTool


Bài viết mới nhất

Timestamp Server là gì? Cách hoạt động và vai trò trong Code Signing Code Signing Certificate và SSL Certificate khác nhau như thế nào? Điều gì xảy ra khi Code Signing Certificate bị thu hồi? Điều gì xảy ra khi Code Signing Certificate hết hạn? Code Signing hoạt động như thế nào? Quy trình ký và xác minh chữ ký số

Có thể bạn quan tâm

Gọi điện
Zalo
Google Maps