Tìm hiểu bộ tạo số ngẫu nhiên trên chíp Ivy Bridge của Intel

Bộ tạo số ngẫu nhiên là gót chân Achilles của kỹ thuật mã hoá. Các giải thuật mã hoá – tạo khoá, mã hoá, và chữ ký điện tử – cần đến các con số bí mật mà những kẻ tấn công không biết, và cách tốt nhất để tạo ra một con số như vậy là chọn nó một cách ngẫu nhiên. Nhưng phần mềm thì chẳng thể nào tạo ra số ngẫu nhiên được. Tất cả những gì nó có thể làm là sử dụng tính ngẫu nhiên của một bộ nguồn nào đó. Bộ nguồn đó có thể là đặc tính cơ học của các ổ đĩa cơ, hay nhiệt độ, hay thời gian, hay các chuyển động của con chuột và bàn phím. Nhưng không phải tất cả các máy tính đều có con chuột, bàn phím, cảm biến nhiệt độ, hay các ổ đĩa cơ. Các hệ thống nhúng (embedded system), các máy tính ảo (virtual machine), và các máy chủ sử dụng đĩa cứng thể rắn (solid-state disc) sẽ thực sự gặp khó khăn trong việc tìm kiếm đủ entropy. [Entropy là thước đo độ hỗn loạn trong hệ thống nhiệt động lực học. Trong bài này, entropy có thể được hiểu như độ ngẫu nhiên. Người dịch]

Ngay cả khi phần mềm có đủ nguồn entropy, việc đánh giá khả năng hoạt động của bộ tạo số ngẫu nhiên vẫn là một việc cực kỳ phức tạp, và có thể có những điểm yếu khó phát hiện sẽ tồn tại hàng nhiều năm. Những lỗ hổng như vậy có thể dẫn đến hậu quả nghiêm trọng. Chẳng hạn như từ tháng 9/2006 đến tháng 5/2008, tất cả các bộ tạo khoá OpenSSL trên các hệ điều hành Linux phiên bản Debian và Ubuntu trong đó có chứng thư máy chủ, khoá đăng nhập SSH, khoá mã hoá e-mail và chữ ký điện tử, đều yếu kém. Ngay cả khoá chữ ký ECDSA trên những hệ thống này cũng có thể bị khai thác. Lỗi này xuất phát từ sự thay đổi trên một dòng mã lệnh của bộ tạo số ngẫu nhiên mà OpenSSL sử dụng. Các bộ tạo số ngẫu nhiên dùng phần mềm không những khó xây dựng và kiểm tra mà còn khó sử dụng và không phải lúc nào cũng hoạt động tốt. Đó là lý do tại sao các bộ xử lý dùng trong các ứng dụng bảo mật thường có một mạch phần cứng chịu trách nhiệm tạo số ngẫu nhiên trong khi hầu hết các lõi xử lý dạng phổ thông thì không. Giờ đây thì Intel đã đưa phần cứng có chức năng tạo số ngẫu nhiên lên các bộ xử lý Ivy Bridge của họ vốn được tung ra thị trường vào đầu năm 2012.

Nguồn Entropy trên chíp Ivy Bridge

Mỗi chíp Ivy Bridge có một mạch điện làm chức năng tạo số ngẫu nhiên. Mạch này được sử dụng chung cho tất cả các lõi vi xử lý của con chíp. Hoạt động của bộ tạo số ngẫu nhiên được bắt đầu từ một nguồn entropy (entropy source, ES) với đặc tính được quyết định bởi một nguồn nhiễu nhiệt (thermal noise) (Hình 1). Trung tâm của nguồn entropy trên chíp Ivy Bridge là một bộ latch RS-NOR với các chân set và reset được nối với nhau (khối màu đỏ). Khi các chân set/reset không được kích hoạt, bộ latch rơi vào trạng thái không ổn định (metastable), và ngõ ra của nó sẽ nhận được giá trị 0 hoặc 1 tuỳ theo nguồn nhiễu nhiệt. Điều khó khăn là làm thế nào để chắc chắn rằng mạch luôn luôn rơi vào trạng thái không ổn định đó. Điều này được thực hiện bởi một mạch hồi tiếp âm (negative feedback) (khối màu tím). Mạch này điều chỉnh lượng điện tích trên một nhóm các tụ điện có điện dung lớn được nối với bộ latch. Mạch hồi tiếp này đẩy bộ latch về phía giá trị 0 mỗi khi bộ latch tạo ra giá trị 1 và ngược lại. Mạch đệm (khối màu xanh lá cây) sẽ xác định khi nào bộ latch đã ổn định và lưu lại giá trị ngõ ra của bộ latch. Sau một khoảng thời gian trễ, mạch này sẽ kích hoạt rồi ngừng kích hoạt các chân R/S của bộ latch để tạo ra một bit mới.

rng_1

Hình 1: Mạch điện này sử dụng một mạch tạo xung “trimmed 1-shot” để tạo ra một nguồn entropy.

Bộ nguồn entropy tự tạo ra xung clock cho mình ở tốc độ khoảng 3GHz. Phần còn lại của mạch tạo số ngẫu nhiên hoạt động ở 800 MHz, do đó ngõ ra của bộ tạo số ngẫu nhiên trước tiên được lấy mẫu ở tốc độ 800 MHz. Sau đó, các mẫu được kiểm tra để đảm bảo bộ nguồn entropy hoạt động tốt.

Mạch điều hoà

Dữ liệu mà bộ ES tạo ra có chất lượng tương đối tốt, nhưng vẫn chưa đủ mạnh cho các ứng dụng mã hoá do chúng không hoàn toàn ngẫu nhiên. Mạch hồi tiếp có thể có một mức độ phân cực nhất định, và toàn bộ mạch điện có thể chịu ảnh hưởng của các hiệu ứng analog như sự giao động. Để giải quyết vấn đề này, tín hiệu từ bộ ES được đưa qua một bộ điều hoà mã (cryptographic conditioner) (Hình 2), có chức năng tập hợp nhiều bit ngẫu nhiên có chất lượng thấp thành một vài bit có chất lượng cao. Ngay cả những bit “không tốt” cũng được đưa qua bộ điều hoà vì chúng không gây ảnh hưởng xấu gì đến tín hiệu được tạo ra.

rng_2

Hình 2: Mạch hồi tiếp tạo ra phân cực nên dữ liệu mà nó tạo ra được đưa qua một mạch điều hoà để tăng chất lượng.

Cứ mỗi vài phần triệu giây (microsecond) mạch điều hoà lại tạo ra một giá trị hạt giống (seed) có độ dài 256 bit. Nhưng nếu tất cả các lõi của chíp Ivy Bridge đều gửi yêu cầu tạo dữ liệu ngẫu nhiên thì tốc độ tạo số ngẫu nhiên như trên sẽ không đáp ứng được. Do đó, giá trị hạt giống được đưa vào một bộ tạo số giả ngẫu nhiên theo chuẩn NIST SP800-90A. Bộ tạo số này dùng giải thuật AES (Advanced Encryption Standard) với khoá dài 128 bit trong chế độ đếm để tăng tốc độ dữ liệu ngõ ra của bộ tạo số lên đến khoảng 800 MB/s.

Sau cùng, các dữ liệu ngẫu nhiên được đưa vào một bộ đệm. Lệnh RDRAND sẽ đọc 64 bit mỗi lần từ bộ đệm này và thay đổi giá trị của thanh ghi đích thành một giá trị ngẫu nhiên. Lệnh RDRAND cũng sẽ thiết lập cờ nhớ (carry flag) cho bộ xử lý khi nó được thực thi thành công. Nếu bộ tạo số ngẫu nhiên không hoạt động (một cách nhất thời do sự xung đột hay một cách lâu dài khi nó không vượt qua được chu trình tự kiểm tra), RDRAND sẽ xoá cờ nhớ và trả về giá trị 0. Do bộ tạo số ngẫu nhiên báo hiệu việc không hoạt động bằng cách trả về giá trị 0, lệnh RDRAND sẽ không thể nào trả về một chuỗi 64-bit toàn 0. Sự phân cực này nhìn chung là đủ nhỏ để có thể bỏ qua.

Đánh giá của Cryptography Research

Intel nhờ Cryptography Research đánh giá thiết kế của bộ tạo số ngẫu nhiên (xem Phân tích bộ tạo số ngẫu nhiên trên chíp Ivy Bridge của Intel). Kết luận chung là bộ tạo số ngẫu nhiên trên Ivy Bridge đã được thiết kế rất cẩn thận và một vài chi tiết mà Cryptography Research quan ngại không thực sự ảnh hưởng đến tính bảo mật của nó.

Bộ nguồn entropy rất đáng tin cậy khi được đánh giá trên phương diện toán học. Các tụ điện trong mạch điều chỉnh cần phải đủ lớn sao cho một xung từ mạch “1-shot” chỉ được thay đổi chúng một lượng nhỏ hơn biên độ của nhiễu nhiệt để đảm bảo bộ latch luôn được đưa về trạng thái không ổn định. Khi các tụ điện lớn như vậy, mạch nguồn entropy sẽ vẫn hoạt động tốt cho dù bị ảnh hưởng của những thay đổi trong sản xuất, điện áp, và nhiệt độ.

Cryptography Research nhận thấy dữ liệu thực tế từ mạch ES gần giống với các tính toán từ mô hình toán học. Điều này có nghĩa là trong một số trường hợp, bộ latch hoặc mạch hồi tiếp không hoàn toàn hoạt động giống như mô hình của chúng. Tuy vậy, chất lượng của tín hiệu ngõ ra của mạch ES vẫn đủ cao, và thậm chí những kết quả đo đạc tệ nhất của Cryptography Research trên những mẫu hoạt động kém nhất vẫn tốt hơn mục tiêu thiết kế.

Công cụ kiểm tra nguồn entropy được thiết kế riêng nhưng cũng đủ để nhận biết những dạng chuỗi bit đơn giản có thể xảy ra khi bộ ES không hoạt động. Ngõ ra của bộ ES được lấy mẫu để giảm từ 3GHz xuống còn 800MHz trước khi đưa qua bộ kiểm tra. Việc lấy mẫu có thể che dấu mất một số dạng chuỗi bit trong quá trình kiểm tra. Nhưng ngay cả khi điều đó xảy ra, nếu chất lượng của bộ ES giảm xuống dưới mức yêu cầu, vốn khá ngặt nghèo, là 0.5 bit entropy cho mỗi bit được tạo ra thì bộ kiểm tra gần như chắc chắn là sẽ phát hiện ra.

Thông thường thì mạch điều hoà sẽ gom 512 bit từ bộ ES để tạo ra 256 bit dữ liệu hạt giống. Do bộ ES được thiết kế để đạt được ít nhất là một nửa bit entropy trong mỗi bit được tạo ra, 256 bit này sẽ gần như là hoàn toàn ngẫu nhiên, nhưng khả năng đó chỉ được đảm bảo ở mức tối thiểu. May mắn là khi bộ tạo số ngẫu nhiên bắt đầu hoạt động, giá trị hạt giống ban đầu sẽ được tạo ra từ 32 kilobit dữ liệu và điều này tạo ra một biên độ an toàn rộng hơn. Tính ngẫu nhiên cao của giá trị khởi tạo này được truyền lại cho các giá trị hạt giống kế tiếp khi bộ tạo số ngẫu nhiên hoạt động, do đó bộ tạo số ngẫu nhiên vẫn hoạt động tốt ngay cả khi nó không nhận được thêm entropy.

Cuối cùng, giá trị hạt giống được đưa qua một bộ tạo số giả ngẫu nhiên. Đây là bộ phận cuối cùng tham gia vào việc tạo ra số ngẫu nhiên. Trong điều kiện hoạt động bình thường, bộ tạo số khởi tạo lại giá trị hạt giống mỗi khi nó tạo ra một giá trị ngẫu nhiên mới do đó tín hiệu ngõ ra gần như là hoàn toàn ngẫu nhiên trên phương diện thống kê. Trong trường hợp hệ thống hoạt động ở cường độ cao, nó có thể tạo ra nhiều giá trị ngẫu nhiên giữa mỗi lần tái khởi tạo giá trị hạt giống. Trong trường hợp này, trạng thái của bộ tạo số được quyết định bởi 256 bit trạng thái và việc tìm ra đặc tính của nó cũng khó như việc phá mã AES 128 bit.

Kết luận

Bộ tạo số ngẫu nhiên mới của Intel đã đơn giản hoá và cải thiện việc tạo số ngẫu nhiên cho các ứng dụng mã hoá trên các máy chủ và các hệ thống nhúng, nơi mà trước kia việc này thường là một thử thách. Bộ tạo số được thiết kế cẩn thận với độ an toàn cao và Cryptography Research hoàn toàn ủng hộ việc sử dụng nó. Tuy vậy, một hệ thống thiết kế với độ an toàn cao sẽ tích hợp thêm các nguồn entropy khác nếu có. Trong mọi trường hợp, người sử dụng nên kiểm tra lại rằng lệnh RDRAND trả về một cờ nhớ bằng 1 để chắc chắn rằng bộ tạo số ngẫu nhiên đang hoạt động ổn định.


Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s

%d bloggers like this: