Cấu hình Menuconfig để kích hoạt Crypto và Kyber
Chúng ta cần truy cập vào menu cấu hình kernel để đảm bảo các module mã hóa cơ bản và thuật toán Kyber (dưới dạng KEM) đã được bật. Đây là bước tiên quyết trước khi biên dịch.
Truy cập vào thư mục nguồn kernel đã được chuẩn bị ở phần trước và chạy lệnh menuconfig.
cd /usr/src/linux
make menuconfig
Hệ thống sẽ mở giao diện dựa trên ncurses. Di chuyển bằng mũi tên và chọn Enter để vào mục, Space để chọn.
Tại giao diện menuconfig, thực hiện các bước điều hướng sau:
- Vào mục Cryptographic API.
- Tích chọn Asymmetric Key Parsing (phải là M hoặc Y).
- Tìm và tích chọn Algorithms.
- Tìm và tích chọn KYBER algorithms (có thể nằm trong mục Asymmetric algorithms hoặc Post-Quantum tùy version kernel).
- Trong mục Default parameters của Kyber, chọn kyber_512, kyber_768, hoặc kyber_1024 tùy mức độ bảo mật bạn cần.
Sau khi chọn xong, nhấn Esc để quay lại, chọn Select rồi Save để lưu cấu hình vào file .config.
Để xác minh cấu hình đã được lưu đúng, chạy lệnh grep kiểm tra các flag.
grep -E "CONFIG_CRYPTO_KYBER|CONFIG_CRYPTO_AKCIPHER|CONFIG_CRYPTO_ALGAPI" .config
Kết quả mong đợi: Xuất hiện các dòng bắt đầu bằng CONFIG_CRYPTO_KYBER=m hoặc =y, cùng các dependency khác được kích hoạt.
Tinh chỉnh các tham số bảo mật Post-Quantum
Việc tích hợp Kyber không chỉ là bật thuật toán, mà cần cấu hình chính sách (policy) để kernel ưu tiên hoặc chấp nhận các key exchange dựa trên Post-Quantum. Chúng ta sẽ chỉnh sửa file cấu hình .config trực tiếp để đảm bảo tính nhất quán.
Sửa file .config trong thư mục nguồn để bổ sung các tham số bảo mật liên quan đến kích thước key và chế độ hoạt động.
echo 'CONFIG_CRYPTO_KYBER_512=m' >> .config
echo 'CONFIG_CRYPTO_KYBER_768=m' >> .config
echo 'CONFIG_CRYPTO_KYBER_1024=m' >> .config
echo 'CONFIG_CRYPTO_AKCIPHER=m' >> .config
Khuyên dùng chế độ module (m) thay vì tích hợp cứng (y) cho Kyber để dễ dàng cập nhật thuật toán trong tương lai mà không cần rebuild toàn bộ kernel.
Để đảm bảo kernel không bị lỗi do thiếu dependency, chạy lệnh menuconfig một lần nữa để đồng bộ hóa các thay đổi vừa thực hiện.
make olddefconfig
Quá trình này sẽ tự động thêm các tùy chọn phụ thuộc (dependencies) mà bạn chưa bật trong bước trước.
Verify: Kiểm tra lại file .config để đảm bảo không có dòng nào bị comment hoặc xóa.
grep "CONFIG_CRYPTO_KYBER" .config
Kết quả mong đợi: Tất cả các dòng Kyber đều có giá trị =m hoặc =y, không có dòng bị comment (#).
Biên dịch Kernel với các flag tối ưu cho Kyber
Kyber là thuật toán dựa trên Lattice (Lưới), đòi hỏi nhiều phép tính số học nguyên lớn và các phép toán vector. Để tối ưu hiệu năng, chúng ta cần sử dụng các cờ biên dịch (compile flags) hỗ trợ vector hóa và tối ưu hóa CPU hiện đại.
Sử dụng lệnh make với các tham số cụ thể để kích hoạt các optimization flags cho crypto module.
make -j$(nproc) ARCH=x86_64 CROSS_COMPILE= CC=gcc O=build_kyber CFLAGS="-O3 -march=native -mtune=native -fno-strict-aliasing -D__KYBER_OPT__" modules
Tham số -O3 tăng mức độ tối ưu hóa, -march=native tận dụng các instruction set của CPU hiện tại (AVX2, AVX-512 nếu có) để tăng tốc tính toán số học, O=build_kyber giữ source code sạch bằng cách đưa file biên dịch vào thư mục riêng.
Flag -D__KYBER_OPT__ là một macro giả định để kích hoạt các branch code tối ưu trong source code Kyber (nếu source code đã được chỉnh sửa để nhận macro này trong phần 3).
Chỉ biên dịch module (modules) trước để kiểm tra lỗi logic, sau đó mới build toàn bộ kernel image nếu cần.
Verify: Kiểm tra thư mục build_kyber để đảm bảo file module .ko đã được sinh ra.
ls -lh build_kyber/crypto/kyber/*.ko
Kết quả mong đợi: Hiển thị danh sách các file module như kyber_512.ko, kyber_768.ko với kích thước hợp lý (vài chục KB).
Kiểm tra log biên dịch và xử lý lỗi Crypto
Trong quá trình biên dịch, các lỗi liên quan đến thư viện crypto thường xảy ra do xung đột giữa các version thư viện hoặc thiếu header file. Chúng ta cần biết cách đọc log để xử lý ngay.
Chạy lại lệnh biên dịch và chuyển hướng output log ra file để phân tích chi tiết.
make -j$(nproc) O=build_kyber modules > build_log.txt 2>&1
File build_log.txt sẽ chứa toàn bộ thông báo lỗi và cảnh báo. Sử dụng grep để lọc các lỗi liên quan đến kyber hoặc crypto.
grep -i "error\|warning" build_log.txt | grep -i "kyber\|crypto\|kyber"
Các lỗi phổ biến cần xử lý:
- Lỗi "undefined reference to 'crypto_aead_new'": Do thiếu module crypto-aead. Giải pháp: Chạy
make menuconfig và bật Cryptographic API -> Authenticated Encryption with Associated Data (AEAD).
- Lỗi "implicit declaration of function 'crypto_kyber_keypair_gen'": Do header file chưa được cập nhật. Giải pháp: Đảm bảo file header
include/crypto/kyber.h đã tồn tại và khớp với source code.
- Lỗi liên quan đến "ACPI" hoặc "X86": Đôi khi code crypto bị conflict với code x86 assembly. Giải pháp: Thêm flag
-fno-stack-protector vào CFLAGS nếu gặp lỗi stack overflow trong log.
Nếu gặp lỗi liên quan đến libelf hoặc binutils, cần cập nhật các công cụ build.
sudo apt-get update && sudo apt-get install --only-upgrade binutils libelf-dev
Sau khi xử lý lỗi, chạy lại lệnh make modules để đảm bảo biên dịch thành công.
make -j$(nproc) O=build_kyber modules
Verify: Chạy lệnh kiểm tra lỗi một lần nữa trên log mới.
tail -n 20 build_log.txt | grep -i "error"
Kết quả mong đợi: Không có dòng nào xuất hiện (empty output), nghĩa là không còn lỗi.
Điều hướng series:
Mục lục: Series: Triển khai Database Post-Quantum với Kyber trên Linux Kernel
« Phần 3: Tích hợp mã nguồn Kyber vào cây nguồn Linux Kernel
Phần 5: Triển khai Kernel mới và kích hoạt module mã hóa Kyber »