Cách ký số Windows Driver bằng SignTool
Cập nhật lần cuối: 25/08/2026
Hướng dẫn cách ký số Windows Driver bằng SignTool với Code Signing Certificate, từ chuẩn bị file Driver, thực hiện ký, thêm Timestamp đến kiểm tra và xác minh chữ ký trên Windows.
Windows Driver là gì?
Windows Driver là phần mềm cho phép hệ điều hành Windows giao tiếp với các thiết bị phần cứng hoặc thành phần hệ thống. Driver có thể được sử dụng cho nhiều loại thiết bị như card mạng, card đồ họa, thiết bị lưu trữ, USB, máy in và các thiết bị phần cứng khác.
Do Driver hoạt động ở mức thấp và có thể ảnh hưởng trực tiếp đến hệ điều hành, Windows áp dụng các cơ chế kiểm tra chữ ký số nhằm xác minh nguồn gốc và tính toàn vẹn của Driver.
Driver Signing là quá trình sử dụng chữ ký số để xác minh rằng Driver đến từ một nhà phát hành xác định và các thành phần được ký không bị thay đổi sau khi ký.
Trong quá trình phát triển và phát hành Driver, SignTool có thể được sử dụng để ký các thành phần phù hợp của Driver Package, đặc biệt là file thực thi như .sys và Catalog File.
Ký Windows Driver không đơn giản chỉ là chạy signtool sign trên file SYS. Driver Package có thể liên quan đến Catalog File, INF, các file nhị phân và quy trình xác thực riêng của Windows. Với Driver được phát hành rộng rãi, cần xem xét thêm yêu cầu của Windows Hardware Dev Center và Microsoft.
Xem thêm: SignTool là gì?
Windows Driver Signing hoạt động như thế nào?
Một Driver Package thường chứa nhiều thành phần khác nhau thay vì chỉ có một file SYS.
Ví dụ:
MyDriver
│
├── MyDriver.sys
├── MyDriver.inf
├── MyDriver.cat
├── MyDriver.dll
└── Other Files
Trong đó:
- .sys: file Driver Binary chứa mã thực thi của Driver.
- .inf: file mô tả cách Windows cài đặt Driver.
- .cat: Catalog File chứa thông tin hash để xác minh các file thuộc Driver Package.
- .dll: có thể là thư viện được Driver sử dụng, tùy kiến trúc Driver.
Windows có thể sử dụng Catalog File để xác minh tính toàn vẹn của các thành phần trong Driver Package.
Mô hình tổng quát:
Driver Source
│
▼
Build Driver
│
▼
Generate Driver Package
│
├── SYS
├── INF
├── CAT
└── Other Files
│
▼
Generate Catalog
│
▼
Sign Driver Components
│
▼
Sign Catalog
│
▼
Verify Package
│
▼
Submit / Deploy Driver
Code Signing Certificate có dùng để ký Windows Driver không?
Có thể sử dụng Certificate cho mục đích Code Signing trong quá trình ký Driver, nhưng cần phân biệt giữa Code Signing thông thường và Windows Driver Signing.
Đối với Driver hiện đại trên các phiên bản Windows được hỗ trợ, việc ký một file SYS bằng Certificate không đồng nghĩa với việc Driver sẽ tự động được Windows chấp nhận trong mọi trường hợp.
Driver có thể phải đáp ứng thêm các yêu cầu về:
- Driver Package Signing.
- Catalog Signing.
- Hardware Compatibility.
- Attestation Signing.
- WHQL hoặc Windows Hardware Compatibility Program.
- Yêu cầu riêng của phiên bản Windows và loại Driver.
Vì vậy, cần xác định rõ mục tiêu là ký Driver để phát triển và kiểm thử nội bộ hay phát hành Driver cho người dùng Windows.
Xem thêm: Code Signing Certificate là gì?
Chuẩn bị trước khi ký Windows Driver
Trước khi thực hiện Driver Signing, cần chuẩn bị môi trường build, Driver Package và Certificate phù hợp.
1. Chuẩn bị Windows SDK và SignTool
SignTool được Microsoft cung cấp trong Windows SDK.
Có thể kiểm tra SignTool bằng Command Prompt:
signtool
Hoặc sử dụng đường dẫn đầy đủ tới SignTool, ví dụ:
C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe
Phiên bản SignTool nên phù hợp với môi trường Windows SDK được sử dụng để build và phát hành Driver.
2. Chuẩn bị Driver Package
Giả sử Driver Package có cấu trúc:
C:\DriverPackage\
MyDriver.sys
MyDriver.inf
MyDriver.cat
Driver cần được build hoàn chỉnh trước khi thực hiện bước ký số.
3. Chuẩn bị Code Signing Certificate
Certificate có thể được lưu trữ trong:
- Windows Certificate Store.
- USB Token.
- Hardware Security Module (HSM).
- Remote Signing hoặc Cloud Signing.
Trong ví dụ đơn giản, Certificate được lưu dưới dạng PFX.
Ký file SYS bằng SignTool
File .sys là thành phần thực thi quan trọng của Driver. SignTool có thể được sử dụng để tạo chữ ký Authenticode trên file SYS.
1. Ký SYS bằng file PFX
Ví dụ:
signtool sign /fd SHA256 /f "C:\Certificates\codesigning.pfx" "C:\DriverPackage\MyDriver.sys"
Trong đó:
- sign: thực hiện ký số.
- /fd SHA256: sử dụng SHA-256 cho File Digest.
- /f: chỉ định file PFX.
- MyDriver.sys: file Driver cần ký.
2. Ký SYS và thêm Timestamp
Đối với Driver được phát hành, Timestamp thường được sử dụng để ghi nhận thời điểm ký.
signtool sign /fd SHA256 /f "C:\Certificates\codesigning.pfx" /tr https://timestamp.digicert.com /td SHA256 "C:\DriverPackage\MyDriver.sys"
Trong đó:
- /fd SHA256: thuật toán hash của file.
- /tr: RFC 3161 Timestamp Server.
- /td SHA256: thuật toán hash sử dụng cho Timestamp.
Timestamp Server thực tế có thể khác tùy Certificate Authority hoặc dịch vụ Timestamp được sử dụng.
Catalog File trong Windows Driver là gì?
Catalog File có phần mở rộng .cat và đóng vai trò quan trọng trong quá trình xác minh Driver Package.
Catalog chứa các giá trị hash đại diện cho những file thuộc Driver Package. Khi Windows kiểm tra Driver, Catalog có thể được sử dụng để xác minh rằng các file liên quan chưa bị thay đổi.
Mô hình:
Driver Package
│
├── MyDriver.sys
├── MyDriver.inf
└── Other Files
│
▼
Catalog File
│
▼
Hash Information
│
▼
Digital Signature
Điều này có nghĩa là Catalog Signing và việc ký trực tiếp file SYS là hai khía cạnh có liên quan nhưng không hoàn toàn giống nhau.
Tạo Catalog File cho Driver
Catalog thường được tạo từ Driver Package bằng công cụ phù hợp của Windows Driver Kit (WDK), chẳng hạn như Inf2Cat.
Ví dụ:
Inf2Cat /driver:"C:\DriverPackage" /os:10_X64
Lệnh trên yêu cầu Inf2Cat tạo Catalog dựa trên Driver Package và hệ điều hành mục tiêu được chỉ định.
Tùy phiên bản WDK và Windows mục tiêu, danh sách giá trị /os có thể khác nhau.
Sau khi tạo Catalog, thư mục Driver có thể có dạng:
C:\DriverPackage\
MyDriver.sys
MyDriver.inf
MyDriver.cat
Catalog cần được tạo lại nếu những file được đưa vào Driver Package thay đổi.
Ký Catalog File bằng SignTool
Sau khi tạo Catalog, có thể sử dụng SignTool để ký file .cat.
signtool sign /fd SHA256 /f "C:\Certificates\codesigning.pfx" /tr https://timestamp.digicert.com /td SHA256 "C:\DriverPackage\MyDriver.cat"
Quá trình này tạo chữ ký số trên Catalog.
Mô hình hoàn chỉnh:
MyDriver.sys
│
├── Hash
│
▼
MyDriver.cat
│
▼
SignTool
│
├── Code Signing Certificate
├── Private Key
└── Timestamp
│
▼
Signed MyDriver.cat
Việc Catalog được ký giúp Windows xác minh Catalog đến từ nhà phát hành có Certificate phù hợp.
Ký SYS và Catalog có giống nhau không?
Không.
File SYS có thể chứa chữ ký Authenticode trực tiếp, trong khi Catalog chứa thông tin hash của các thành phần trong Driver Package và bản thân Catalog cũng có thể được ký.
| Thành phần | Vai trò |
|---|---|
| SYS | File thực thi của Driver |
| INF | Mô tả thông tin và quá trình cài đặt Driver |
| CAT | Chứa thông tin hash để xác minh Driver Package |
| Catalog Signature | Xác minh nguồn gốc và tính toàn vẹn của Catalog |
Vì vậy, không nên coi việc ký file SYS là toàn bộ quy trình Driver Signing.
Kiểm tra chữ ký của file SYS
Sau khi ký, có thể sử dụng SignTool để kiểm tra chữ ký:
signtool verify /pa "C:\DriverPackage\MyDriver.sys"
Để hiển thị thông tin chi tiết:
signtool verify /v /pa "C:\DriverPackage\MyDriver.sys"
Có thể sử dụng thêm:
signtool verify /v /tw /pa "C:\DriverPackage\MyDriver.sys"
Tùy chọn /tw cho phép kiểm tra và cảnh báo khi chữ ký không có Timestamp.
Kiểm tra chữ ký của Catalog
Catalog cũng có thể được kiểm tra bằng SignTool:
signtool verify /pa "C:\DriverPackage\MyDriver.cat"
Để xem thông tin chi tiết:
signtool verify /v /pa "C:\DriverPackage\MyDriver.cat"
Kiểm tra Timestamp:
signtool verify /v /tw /pa "C:\DriverPackage\MyDriver.cat"
Kiểm tra toàn bộ Driver Package
Kiểm tra chữ ký của từng file riêng lẻ chưa phải là toàn bộ quá trình xác minh Driver Package.
Đối với Driver Package, cần kiểm tra thêm mối quan hệ giữa:
- INF.
- CAT.
- SYS.
- Các file liên quan.
- Certificate Chain.
- Chữ ký của Catalog.
Windows có thể sử dụng các cơ chế xác minh riêng trong quá trình cài đặt Driver.
Do đó, ngoài SignTool, quá trình kiểm thử Driver nên được thực hiện trên môi trường Windows mục tiêu để xác nhận Driver Package có thể được cài đặt và tải đúng cách.
Driver Signing trong môi trường Test Mode
Trong quá trình phát triển Driver, nhà phát triển có thể cần thử nghiệm các Driver chưa được phát hành chính thức.
Windows cung cấp cơ chế Test Signing để phục vụ mục đích phát triển và kiểm thử.
Đây là môi trường khác với Driver được ký để phát hành production.
Không nên sử dụng Test Signing như một phương án thay thế cho quy trình ký Driver chính thức khi phân phối phần mềm cho người dùng.
Attestation Signing và WHQL Signing
Đối với Driver được phát hành rộng rãi, việc ký Certificate trực tiếp bằng SignTool có thể chưa phải là bước cuối cùng.
Windows cung cấp các cơ chế liên quan đến việc phân phối và xác thực Driver thông qua hệ sinh thái Windows Hardware.
Hai khái niệm thường gặp là:
| Phương thức | Mục đích |
|---|---|
| Attestation Signing | Quy trình gửi Driver tới Microsoft để thực hiện việc ký theo cơ chế Attestation |
| WHQL / Hardware Compatibility | Quy trình kiểm thử và xác nhận khả năng tương thích phần cứng theo chương trình của Microsoft |
Việc lựa chọn quy trình phụ thuộc vào loại Driver, phiên bản Windows mục tiêu và yêu cầu phát hành.
Không nên hiểu rằng một file SYS được ký bằng Code Signing Certificate sẽ tự động trở thành Driver được Microsoft chấp nhận trên mọi phiên bản Windows.
Ký Windows Driver có cần Timestamp không?
Timestamp nên được sử dụng khi ký Driver và Catalog trong quá trình phát hành.
Ví dụ:
signtool sign /fd SHA256 /f "C:\Certificates\codesigning.pfx" /tr https://timestamp.digicert.com /td SHA256 "C:\DriverPackage\MyDriver.sys"
Và đối với Catalog:
signtool sign /fd SHA256 /f "C:\Certificates\codesigning.pfx" /tr https://timestamp.digicert.com /td SHA256 "C:\DriverPackage\MyDriver.cat"
Timestamp ghi nhận thời điểm chữ ký được tạo và có ý nghĩa quan trọng khi Certificate được sử dụng để ký sau này hết hạn.
Xem thêm: Timestamp là gì?
Ký Driver bằng USB Token hoặc HSM
Private Key dùng để ký Driver có thể được bảo vệ bằng USB Token hoặc HSM.
Mô hình:
SignTool
│
▼
Windows Certificate Store
│
▼
CSP / KSP
│
▼
USB Token / HSM
│
▼
Private Key
│
▼
Digital Signature
│
├── SYS
└── CAT
Trong mô hình này, Private Key được giữ trong thiết bị bảo mật và SignTool yêu cầu thiết bị thực hiện thao tác ký.
Cách cấu hình cụ thể phụ thuộc vào CSP/KSP, middleware và thiết bị bảo mật của nhà cung cấp.
Xem thêm: HSM là gì?
Quy trình ký Windows Driver hoàn chỉnh
Một quy trình Driver Signing có thể được triển khai theo mô hình:
Driver Source Code
│
▼
Build Driver
│
▼
Generate INF
│
▼
Generate Catalog
│
▼
Test Driver
│
▼
Sign Driver Components
│
├── SYS
└── CAT
│
▼
Add Timestamp
│
▼
Verify Signature
│
▼
Driver Validation
│
▼
Microsoft Signing / Submission
│
▼
Release Driver
Trong thực tế, thứ tự chính xác có thể thay đổi tùy loại Driver và quy trình phát hành được sử dụng.
Ví dụ ký SYS và Catalog
Giả sử Driver Package có:
- C:\DriverPackage\MyDriver.sys
- C:\DriverPackage\MyDriver.cat
- C:\Certificates\codesigning.pfx
Ký file SYS:
signtool sign /fd SHA256 /f "C:\Certificates\codesigning.pfx" /tr https://timestamp.digicert.com /td SHA256 "C:\DriverPackage\MyDriver.sys"
Ký Catalog:
signtool sign /fd SHA256 /f "C:\Certificates\codesigning.pfx" /tr https://timestamp.digicert.com /td SHA256 "C:\DriverPackage\MyDriver.cat"
Kiểm tra SYS:
signtool verify /v /pa "C:\DriverPackage\MyDriver.sys"
Kiểm tra Catalog:
signtool verify /v /pa "C:\DriverPackage\MyDriver.cat"
Đây là ví dụ minh họa cho thao tác ký và xác minh bằng SignTool. Quy trình phát hành Driver thực tế có thể yêu cầu thêm các bước kiểm thử, đóng gói và ký thông qua Microsoft.
Các lỗi thường gặp khi ký Windows Driver
1. Driver được ký nhưng Windows vẫn không cho cài đặt
Đây là một trong những trường hợp dễ gây nhầm lẫn nhất.
Việc SignTool xác nhận chữ ký hợp lệ không đồng nghĩa với việc Driver Package đáp ứng toàn bộ yêu cầu của Windows.
Cần kiểm tra:
- Certificate Chain.
- Catalog File.
- INF.
- Driver Package Integrity.
- Driver Signing Policy.
- Phiên bản Windows.
- Architecture của Driver.
- Yêu cầu Attestation hoặc WHQL nếu có.
2. Catalog không còn khớp với Driver Package
Nếu một file thuộc Driver Package bị thay đổi sau khi Catalog được tạo, hash của file có thể không còn khớp với thông tin trong Catalog.
Trong trường hợp đó, cần tạo lại Catalog trước khi ký.
Modify Driver
│
▼
Generate Catalog Again
│
▼
Sign Catalog
│
▼
Verify
3. Certificate không phù hợp
Không phải mọi Certificate đều phù hợp với mọi mục đích Driver Signing.
Cần kiểm tra:
- Key Usage.
- Enhanced Key Usage.
- Certificate Chain.
- Thời hạn Certificate.
- Chính sách Driver Signing tương ứng.
4. Timestamp Server không thể truy cập
Nếu Timestamp Server không hoạt động hoặc bị Firewall chặn, quá trình ký có thể thất bại.
Cần kiểm tra kết nối tới Timestamp Server, DNS, Proxy và Firewall.
5. Driver hoạt động ở Test Mode nhưng không hoạt động trên hệ thống production
Driver được sử dụng trong môi trường Test Signing có thể không đáp ứng các yêu cầu của môi trường production.
Do đó, cần phân biệt rõ:
- Development Signing.
- Test Signing.
- Production Driver Signing.
- Microsoft Attestation Signing.
- WHQL / Hardware Compatibility.
Những hiểu lầm phổ biến về Windows Driver Signing
1. Ký file SYS là đủ để phát hành Driver
Không phải lúc nào cũng đúng.
Driver Package có thể cần Catalog Signing và phải đáp ứng các yêu cầu riêng của Windows hoặc Microsoft tùy trường hợp.
2. Ký CAB là đồng nghĩa với ký Driver
Không.
CAB chỉ là container chứa các file. Việc ký CAB không thay thế các yêu cầu ký và xác minh Driver Package.
3. SignTool tự động đưa Driver lên Microsoft
Không.
SignTool là công cụ ký và xác minh chữ ký. SignTool không thay thế quy trình submission hoặc các dịch vụ ký Driver của Microsoft.
4. Driver có chữ ký hợp lệ thì chắc chắn được Windows chấp nhận
Không.
Windows còn kiểm tra nhiều yếu tố khác liên quan đến Driver Package, chính sách ký Driver, Certificate Chain, Catalog và yêu cầu của phiên bản Windows.
5. Có thể chỉnh sửa Driver sau khi ký
Không nên.
Nếu các thành phần đã được đưa vào Catalog bị thay đổi, Catalog có thể không còn khớp với Driver Package. Nếu file SYS đã được ký trực tiếp và bị thay đổi, chữ ký cũng có thể mất hiệu lực.
Những lưu ý khi ký Windows Driver
- Hoàn tất Driver Package trước khi tạo Catalog.
- Tạo lại Catalog nếu các file trong Driver Package thay đổi.
- Sử dụng SHA-256 cho các chữ ký mới.
- Sử dụng Timestamp khi ký.
- Kiểm tra cả SYS và Catalog sau khi ký.
- Bảo vệ Private Key bằng USB Token, HSM hoặc giải pháp Signing phù hợp.
- Không sử dụng Test Signing như phương án phát hành production.
- Phân biệt Code Signing với Driver Signing.
- Kiểm tra yêu cầu của phiên bản Windows mục tiêu.
- Nếu phát hành Driver rộng rãi, cần xem xét quy trình submission và signing của Microsoft.
Xem thêm: Code Signing là gì?
Kết luận
Ký Windows Driver là quy trình phức tạp hơn so với việc ký một file EXE, DLL hoặc MSI thông thường. SignTool có thể được sử dụng để ký và xác minh các thành phần của Driver Package, trong đó có file SYS và Catalog File.
Một quy trình cơ bản gồm build Driver, tạo Driver Package, tạo Catalog bằng công cụ phù hợp, ký các thành phần cần thiết bằng Code Signing Certificate, thêm Timestamp và kiểm tra lại chữ ký.
Đối với Driver được phát hành cho người dùng Windows, cần phân biệt giữa việc tạo chữ ký bằng SignTool và các yêu cầu Driver Signing của Microsoft. Tùy loại Driver và mục tiêu phát hành, có thể cần thêm quy trình Attestation Signing hoặc WHQL/Hardware Compatibility.
Vì Driver hoạt động ở mức hệ thống, việc bảo vệ Private Key và kiểm soát toàn bộ quy trình ký là yếu tố quan trọng để đảm bảo tính toàn vẹn và nguồn gốc của Driver trước khi phát hành.
Bạn vẫn chưa biết nên chọn…?
Đừng lo lắng, đội ngũ chuyên gia của chúng tôi luôn sẵn sàng lắng nghe nhu cầu và tư vấn giải pháp bảo mật phù hợp nhất cho website và doanh nghiệp của bạn. Hãy liên hệ ngay để được hỗ trợ nhanh chóng, chính xác và hiệu quả.