Các mã thẻ đƣợc tạo ra bằng thuật toán xuất phát từ hai giá trị bên trong: giá trị thời gian 64 bit và một giá trị bí mật 64 bit.
Kết quả của thuật toán sau đó đƣợc đƣa qua một thủ tục làm biến đổi cuối cùng làm cho nó trở nên khó hiểu hơn là đầu ra thực của thuật toán và đƣa ra một giá trị phù hợp hiển thị tokencode dựa trên phần cứng hoặc phần mềm.
Hình 2.11. Thủ tục tạo tokencode
Giá trị đƣa ra bằng thủ tục biến đổi độ dài 64 bit và chia thành nhiều tokencode phụ thuộc vào thiết bị tạo tokencode và khoảng thời gian hiển thị.
2.5.1.1. Giá trị thời gian (Time)
Biến số đặt vào trong thuật toán SecurID biểu diễn thời gian hiện tại của thuật toán là giá trị 64 bit. Tuy nhiên, quá trình kiểm tra đã chỉ ra rằng giá trị 64 bit này là đƣợc tạo ra từ biểu diễn 32 bit của thời gian hiện tại (GMT) tính theo các giây từ 12 giờ đêm ngày 01/01/1986.
Trong hàm làm tròn, giá trị đƣợc dịch trái hai lần là tƣơng đƣơng với phép nhân 4. Hàm này đảm bảo đƣợc giá trị của kết quả đầu ra luôn luôn là chẵn theo tính chất kết hợp của phép nhân. Do đó, hai bit có trọng số thấp nhất sẽ luôn luôn là 00 và các giá trị có thể của mỗi trọng số thấp nhất là 0x0, 0x4, 0x8 và 0xC. Phép nhân này sẽ xóa nhiều hơn hai bit của entropy từ giá trị thời gian 24 bit lên tới tổng giá trị thời gian có thể là 222 hay 4,194,304. Tổng giá trị thời gian này có thể giảm một cách đáng kể nếu giả thiết kẻ tấn công biết đƣợc giá trị thời gian xấp xỉ đã đƣợc tạo trƣớc đó.
Kết quả của khoảng thời gian đã đƣợc biến đổi này có khả năng tạo ra một chu kỳ tokencode hoàn chỉnh bằng cách tăng thông qua tất cả các giá trị thời gian có thể đối với một giá trị bí mật đơn lẻ. Chu kỳ hoàn chỉnh có chứa tổng 4,194,304 đầu ra 64-bit có thể từ thuật toán SecurID.
Thuật toán Convert
Giá trị trước khi convert
Giá trị tokencode 64 bít time
Giai đoạn của chu kỳ đƣợc thiết kế dài hơn thời gian sống của thiết bị chứa mã thông báo, nếu thiết bị chạy trong thời gian thực (trong trƣờng hợp một độ dài của tokencode 8-bit đƣợc sử dụng với chu kỳ hiển thị là 60 giây, nó sẽ mất gần 16 năm để lặp qua tất cả các giá trị tokencode có thể). Tuy nhiên, việc sử dụng một thiết bị tokencode mềm đã đƣợc sửa đổi , thời gian có thể tăng lên với một tốc độ lớn hơn, do đó việc đƣa ra toàn bộ chu kỳ tokencode chỉ là vấn đề bao nhiêu phút.
2.5.1.2. Giá trị bí mật (Secret)
RSA đã tiết lộ cách thức họ tạo ra các mã bí mật 64-bit ban đầu mà đƣợc sử dụng giống nhƣ các giá trị đầu vào bên trong thuật toán của họ. Những giá trị này đƣợc quy định trƣớc, giả thiết ngay cả nếu cơ chế tạo ra có thể đoán đƣợc, nó có thể đƣợc thay đổi một cách trong suốt tới một lƣợc đồ tạo ngẫu nhiên hơn. Tuy nhiên, thậm chí với cách tạo số giả ngẫu nhiên hoặc ngẫu nhiên mạnh của mã bí mật, số lƣợng giới hạn các giá trị có thể đƣợc coi là không thích hợp trong một vài trƣờng hợp nào đó.
Sẽ có thành phần bí mật đƣợc xem là thoả hiệp từ các thẻ cứng hoặc các ứng dụng thực thi thẻ mềm, tất cả các giá trị đầu ra có thể đƣợc quay vòng qua và đƣợc ghi lại bằng ccsh sử dụng thuật toán SecurID. Điều này có thể thực hiện mà không giả mạo bằng thiết bị lƣu tokencode giả mạo, do đó việc tấn công sẽ không đƣợc phát hiện tức thì.
2.5.1.3. Giá trị biến đổi (Convert)
Giá trị tokencode có thể đƣợc nhập vào bởi ngƣời sử dụng đƣợc hiển thị trong chuỗi nhị phân từ 6 đến 8 bit. Giá trị nhị phân này xuất phát từ giá trị hexa 64-bit, đƣợc gọi là ―giá trị trƣớc khi biến đổi‖ bằng cách sử dụng một thủ tục biến đổi đơn giản nhƣ sau:
For each nibble in the hexadecima pre-convert value { if (nibble > 9) { nibble = nibble - 2; nibble = nibble - {0, 2, 4, 6, 8}; nibble = nibble %10;}}
Với mỗi nibble trong giá trị trƣớc biến đổi, nếu nibble lớn hơn 9 thì phép biến đổi đƣợc sử dụng. Ngƣợc lại, nếu nibble nhỏ hơn hoặc bằng 9, số tự nhiên đƣợc hiển thị. Từ đây, giá trị chỉ ra cho ngƣời dùng có thể chỉ ra giống nhƣ trong bảng dƣới đây: 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 A B A B A B A B A B C D C D C D C D C D E F E F E F E F E F
Bảng 2.1. Bảng các giá trị của tokencode
Theo tƣ tƣởng thiết kế, giá trị nhóm 6 từ 0xA đến 0xF có khả năng đƣợc ánh xạ tới giá trị thập phân từ 0 đến 9. Tuy nhiên, do 0xA, 0xC và 0xE chỉ có thể đƣợc ánh xạ sang 0, 2, 4, 6 hay 8 và 0xB, 0xD và 0xF chỉ có thể đƣợc ánh xạ tới 1, 3, 5, 7 hoặc 9, số lƣợng các giá trị trƣớc biến đổi có thể đƣợc giảm một cách đáng kể.
Gọi tlen là độ dài của mã thông báo, với mỗi giá trị tokencode bất kỳ đƣợc đƣa ra, thủ tục biến đổi chỉ cung cấp 4tlen các giá trị trƣớc biến đổi có thể, các giá trị này sau đó có thể đƣợc phân tích để quyết định các cấu hình bit riêng biệt của giá trị bí mật thực sự.
Thiết kế lý tƣởng nếu đƣa ra 7tlen giá trị trƣớc biến đổi có thể. Ví dụ, một tokencode 6 ký tự đặc biệt, có 46 hay 4096 giá trị trƣớc biến đổi có thể đƣợc tạo ra. Trƣờng hợp lý tƣởng sẽ đƣa ra 76 hay 117,649 các giá trị trƣớc biến đổi có thể.
Với mỗi giá trị của tokencode đƣợc hiển thị thực sự thì có một khả năng là 62,5% số là số tự nhiên (ví dụ, một số 0 đƣợc hiển thị có một giá trị 0 trƣớc biến đổi), còn lại 12,5% khả năng số là {A, C, E} hoặc {B, D, F}.
2.5.1.4. Các xung đột trong chu kỳ của tokencode
Việc phân tích các chu kỳ tokencode cho một ví dụ về các secret 64 bit đƣợc tạo ra một cách giả ngẫu nhiên mang lại các kết quả thú vị. Ngoài 8,388,608 tokencode có khả năng (hai tokencode đƣợc đƣa ra cho mỗi giá trị thời gian), xấp xỉ 8 triệu tokencode là duy nhất và chỉ xuất hiện một lần trên một chu kỳ. Còn lại gần 300,000 là các giá trị lặp lại hoặc bị xung đột.
Do đó, 4% chu kỳ tokencode có các giá trị lặp. Đây là một phần giá trị đƣợc tạo ra do vòng convert. [4]