← Quay lại blog

So sánh Base32 và Base64: Khác biệt cấu trúc, quy tắc đệm và ứng dụng mật mã học

PetexSpace

Các thuật toán mã hóa nhị phân sang văn bản (binary-to-text) đóng vai trò là một tầng trọng yếu trong mạng máy tính và lưu trữ dữ liệu hiện đại. Do các kênh truyền thông kế thừa (chẳng hạn như hệ thống thư điện tử SMTP, các giao thức định tuyến URL và giao diện dòng lệnh) ban đầu được thiết kế dựa trên ranh giới truyền tải ASCII 7-bit, việc truyền trực tiếp các octet nhị phân 8-bit tùy ý qua các phương tiện này thường xuyên dẫn đến hỏng dữ liệu, mất mát byte và lỗi đóng khung (framing errors).

Tiêu chuẩn chính thức điều phối các phép biến đổi này là IETF RFC 4648, đặc tả quy chuẩn cho các cơ chế mã hóa Base16, Base32 và Base64. Trong khi Base64 chiếm ưu thế áp đảo trong truyền tải dữ liệu web tổng quát, Base32 lại giữ một vị trí không thể thay thế trong an toàn mật mã học, các giao thức xác thực và mạng lưới phân tán phi tập trung.

Khi quản lý thông tin xác thực đa yếu tố, các kỹ sư thường dựa vào các công cụ để giải mã khóa xác thực Base32 nhằm kiểm tra và xác minh tính hợp lệ của seed. Đối với các luồng xử lý dữ liệu và xác minh tuần tự hóa nói chung, các nhà phát triển thường xuyên sử dụng các tiện ích để định dạng và kiểm tra dữ liệu đã mã hóa, đảm bảo tính căn chỉnh bitwise chính xác và tuân thủ đúng chuẩn RFC trên nhiều nền tảng không đồng nhất.

1. Mô hình mã hóa cơ số (RFC 4648)

Về mặt lý thuyết nền tảng, mã hóa nhị phân sang văn bản là một bài toán chuyển đổi cơ số (radix conversion). Bộ nhớ máy tính ở mức thô được cấu trúc thành các byte 8-bit (octet), đại diện cho hệ thống số cơ số 256 (28=2562^8 = 256).

Để biểu diễn dữ liệu nhị phân tùy ý một cách an toàn bằng các ký tự ASCII in được và con người có thể đọc hiểu, luồng bit thô phải được gom nhóm thành các khối bit nhỏ đồng nhất. Mỗi khối này ánh xạ trực tiếp tới một ký tự riêng biệt trong một bảng ký tự (alphabet) được xác định trước:

  • Base64 (26=642^6 = 64): Gom nhóm luồng bit thành các khối 6-bit. Mỗi giá trị 6-bit (từ 00 đến 6363) ánh xạ tới một trong 64 ký tự in được.
  • Base32 (25=322^5 = 32): Gom nhóm luồng bit thành các khối 5-bit. Mỗi giá trị 5-bit (từ 00 đến 3131) ánh xạ tới một trong 32 ký tự in được.
  • Base16 (24=162^4 = 16, Thập lục phân - Hexadecimal): Gom nhóm luồng bit thành các nibble 4-bit (từ 00 đến 1515), ánh xạ tới 16 ký tự.
   RAW BINARY STREAM (Bits)
   0 1 0 0 1 1 0 1   0 1 1 0 0 0 0 1   0 1 1 0 1 1 1 0   0 1 1 0 0 1 0 0   ...
   [--- Byte 0 ---]  [--- Byte 1 ---]  [--- Byte 2 ---]  [--- Byte 3 ---]

   BASE64 GROUPING (6-Bit Slices)
   [ 0 1 0 0 1 1 ] [ 0 1 0 1 1 0 ] [ 0 0 0 1 0 1 ] [ 1 0 1 1 1 0 ]  ...
   Chunk 0 (19)    Chunk 1 (22)    Chunk 2 (5)     Chunk 3 (46)
   --> 'T'         --> 'W'         --> 'F'         --> 'u'

   BASE32 GROUPING (5-Bit Slices)
   [ 0 1 0 0 1 ] [ 1 0 1 0 1 ] [ 1 0 0 0 0 ] [ 0 1 0 1 1 ] [ 0 1 1 1 0 ] ...
   Chunk 0 (9)   Chunk 1 (21)  Chunk 2 (16)  Chunk 3 (11)  Chunk 4 (14)
   --> 'J'       --> 'V'       --> 'Q'       --> 'L'       --> 'O'

Mật độ thông tin và chi phí lưu trữ phụ trội (Overhead)

Hệ quả toán học của việc giảm độ rộng bit là sự gia tăng không thể tránh khỏi về kích thước payload sau khi tuần tự hóa:

Efficiency=Bits per CharacterBits per Byte=log⁡2(Radix)8\text{Efficiency} = \frac{\text{Bits per Character}}{\text{Bits per Byte}} = \frac{\log_2(\text{Radix})}{8}
  1. Chi phí lưu trữ phụ trội của Base64: EfficiencyBase64=68=0.75(75%)\text{Efficiency}_{Base64} = \frac{6}{8} = 0.75 \quad (75\%) Inflation Factor=86=1.333⋯  ⟹  Kıˊch thước thoˆ ta˘ng theˆm 33.3%.\text{Inflation Factor} = \frac{8}{6} = 1.333 \dots \implies \text{Kích thước thô tăng thêm } 33.3\%. Ba byte nhị phân (24 bit) mở rộng thành chính xác bốn ký tự ASCII.
  2. Chi phí lưu trữ phụ trội của Base32: EfficiencyBase32=58=0.625(62.5%)\text{Efficiency}_{Base32} = \frac{5}{8} = 0.625 \quad (62.5\%) Inflation Factor=85=1.600  ⟹  Kıˊch thước thoˆ ta˘ng theˆm 60.0%.\text{Inflation Factor} = \frac{8}{5} = 1.600 \implies \text{Kích thước thô tăng thêm } 60.0\%. Năm byte nhị phân (40 bit) mở rộng thành chính xác tám ký tự ASCII.

Mặc dù Base32 đòi hỏi băng thông lưu trữ cao hơn đáng kể so với Base64, hiệu suất dung lượng này được chủ động đánh đổi để lấy sự thân thiện với con người, tính không phân biệt chữ hoa, chữ thường và độ bền vững khi truyền tải qua các kênh truyền thông bị giới hạn.

2. Gom nhóm bitwise, cơ chế đóng gói và quy tắc đệm (Padding)

Vì bộ nhớ máy tính cấp phát dữ liệu theo ranh giới 8-bit, một chuỗi nhị phân đầu vào hiếm khi kết thúc đúng ngay tại một bội số chính xác của độ rộng bit cơ số. RFC 4648 thiết lập các cơ chế đệm nghiêm ngặt bằng ký tự đệm = để bảo toàn sự căn chỉnh byte.

Căn chỉnh bit và chu kỳ lượng tử (Quantum Cycles) trong Base64

Bội số chung nhỏ nhất của 8 (kích thước byte) và 6 (kích thước khối Base64) là:

LCM(8,6)=24 bits (3 byte đaˆˋu vaˋo  ⟺  4 kyˊ tự Base64)\text{LCM}(8, 6) = 24 \text{ bits } (3 \text{ byte đầu vào} \iff 4 \text{ ký tự Base64})

Mỗi khối 24-bit đại diện cho một chu kỳ lượng tử hoàn chỉnh:

  • Trường hợp 1: N≡0(mod3)N \equiv 0 \pmod 3: Số lượng byte đầu vào là bội số chính xác của 3. Không cần thêm đệm (00 ký tự =).
  • Trường hợp 2: N≡1(mod3)N \equiv 1 \pmod 3: Dư một byte (8 bit). 8 bit này cung cấp ký tự 6-bit đầu tiên và 2 bit đầu của ký tự thứ hai. 4 bit còn lại của ký tự thứ hai được đệm bằng các bit 0. Hai ký tự đệm = được thêm vào để duy trì lượng tử 4 ký tự: XX==.
  • Trường hợp 3: N≡2(mod3)N \equiv 2 \pmod 3: Dư hai byte (16 bit). 16 bit này cung cấp hai ký tự 6-bit trọn vẹn và 4 bit đầu của ký tự thứ ba. 2 bit còn lại được đệm bằng các bit 0. Một ký tự = duy nhất được thêm vào: XXX=.

Căn chỉnh bit trong Base32 và ma trận đệm 5 trường hợp

Bội số chung nhỏ nhất của 8 và 5 lớn hơn đáng kể:

LCM(8,5)=40 bits (5 byte đaˆˋu vaˋo  ⟺  8 kyˊ tự Base32)\text{LCM}(8, 5) = 40 \text{ bits } (5 \text{ byte đầu vào} \iff 8 \text{ ký tự Base32})

Mỗi khối 40-bit tạo thành một chu kỳ lượng tử Base32 hoàn chỉnh. Khi luồng đầu vào kết thúc ở một ranh giới không đều, Mục 6 của RFC 4648 chỉ định một ma trận đệm toàn diện gồm 5 trường hợp:

Byte đầu vào còn dưSố lượng bitKý tự Base32 mã hóaBit đệm 0Ký tự = ở cuốiĐịnh dạng chuỗi đầu ra
0 byte (N≡0(mod5)N \equiv 0 \pmod 5)0000(Không có đệm)
1 byte (N≡1(mod5)N \equiv 1 \pmod 5)82 ký tự (10 bit)2 bit6XX======
2 byte (N≡2(mod5)N \equiv 2 \pmod 5)164 ký tự (20 bit)4 bit4XXXX====
3 byte (N≡3(mod5)N \equiv 3 \pmod 5)245 ký tự (25 bit)1 bit3XXXXX===
4 byte (N≡4(mod5)N \equiv 4 \pmod 5)327 ký tự (35 bit)3 bit1XXXXXXX=

Lưu ý rằng có thể xuất hiện 1, 3, 4 và 6 ký tự đệm trong Base32, nhưng không bao giờ có 2 hoặc 5 ký tự đệm. Một chuỗi mã hóa chứa số lượng ký hiệu = không hợp lệ sẽ vi phạm chuẩn RFC 4648 và bắt buộc phải bị từ chối bởi các bộ giải mã tuân thủ chuẩn.

   BASE32 40-BIT QUANTUM PIPELINE
   Byte 0    Byte 1    Byte 2    Byte 3    Byte 4
   [8 bits]  [8 bits]  [8 bits]  [8 bits]  [8 bits]  = 40 Bits Total
   \______/  \______/  \______/  \______/  \______/
      |         |         |         |         |
      v         v         v         v         v
   [5b] [5b] [5b] [5b] [5b] [5b] [5b] [5b]           = 8 Base32 Symbols
    C0   C1   C2   C3   C4   C5   C6   C7

3. Thiết kế bảng chữ cái, loại bỏ sự mơ hồ và tính công thái học với con người

Điểm khác biệt kiến trúc mang tính quyết định giữa Base64 và Base32 nằm ở sự chọn lựa có chủ đích đối với bảng ký tự của chúng.

   STANDARD BASE64 ALPHABET (Case Sensitive, Ambiguous Characters)
   A-Z (26) + a-z (26) + 0-9 (10) + '+' + '/' (2) = 64 Symbols
   Vulnerabilities: '0' vs 'O', '1' vs 'l' vs 'I', '+' and '/' conflict with URLs

   STANDARD BASE32 ALPHABET (RFC 4648, Case Insensitive, Unambiguous)
   A-Z (26) + 2-7 (6) = 32 Symbols
   Omitted Characters: 0 (Zero), 1 (One), 8 (Eight), 9 (Nine)

Bảng chữ cái Base64 tiêu chuẩn và những rủi ro đi kèm

Bảng chữ cái Base64 tiêu chuẩn được định nghĩa trong Mục 4 của RFC 4648 bao gồm:

  • Chữ cái in hoa A-Z (chỉ số 0 đến 25)
  • Chữ cái in thường a-z (chỉ số 26 đến 51)
  • Các chữ số 0-9 (chỉ số 52 đến 61)
  • Các ký hiệu + (chỉ số 62) và / (chỉ số 63)

Dù có mật độ cao và gọn gàng, bảng chữ cái này bộc lộ những điểm yếu nghiêm trọng trong các hệ thống thực tế:

  1. Xung đột ký tự phân tách trong URL và đường dẫn: Các ký tự +, / và = mang ý nghĩa cú pháp dành riêng trong Uniform Resource Locators (URL) và đường dẫn tệp POSIX. Việc truyền tải Base64 bên trong các tham số truy vấn đòi hỏi phải dùng percent-encoding hoặc chuyển sang biến thể Base64 an toàn cho URL (URL-safe Base64 theo RFC 4648 Mục 5), thay thế + bằng - và / bằng _.
  2. Sự nhầm lẫn thị giác và lỗi hoán vị ký tự: Bảng chữ cái này chứa các cặp ký tự rất khó phân biệt bằng mắt thường trên nhiều phông chữ typography tiêu chuẩn: chữ số 0 với chữ in hoa O, chữ số 1 với chữ in thường l và chữ in hoa I.
  3. Phân biệt chữ hoa, chữ thường (Case Sensitivity): Base64 phân biệt chặt chẽ chữ hoa và chữ thường. Nó không thể được đọc chính tả một cách đáng tin cậy qua đường truyền thoại, không thể nhập trên bàn phím số hạn chế, hoặc truyền qua các hệ thống tệp và hệ thống DNS không phân biệt chữ hoa chữ thường mà không làm hỏng dữ liệu.

Bảng chữ cái Base32 của RFC 4648: Thiết kế công thái học

Để giải quyết các nguy cơ thất bại của Base64, Mục 6 của RFC 4648 chỉ định một bảng chữ cái gồm 32 ký tự được thiết kế đặc biệt nhằm đảm bảo độ bền vững khi thao tác thủ công:

Base32 Alphabet={A-Z,  2-7}\text{Base32 Alphabet} = \{ \text{A-Z}, \; \text{2-7} \}

Các lựa chọn thiết kế này phản ánh sự cân nhắc sâu sắc về mặt vận hành:

  • Hoàn toàn không phân biệt chữ hoa, chữ thường: Bảng chữ cái chỉ chứa các ký tự in hoa từ A đến Z và các chữ số từ 2 đến 7. Bộ giải mã chấp nhận dữ liệu đầu vào là chữ thường và ánh xạ trực tiếp a-z sang các ký tự in hoa tương đương.
  • Loại bỏ các ký tự trực quan dễ gây mơ hồ:* Chữ số `0` bị loại bỏ hoàn toàn để tránh nhầm lẫn với chữ cái `O`. * Chữ số `1` bị loại bỏ hoàn toàn để tránh nhầm lẫn với chữ cái `I` và `L`. * Các chữ số `8` và `9` bị lược bỏ để duy trì kích thước bảng chữ cái chính xác ở mức 32 (252^5).
  • An toàn khi phân nhóm bằng dấu gạch nối: Các chuỗi Base32 có thể được chia thành các khối 4 ký tự tiện dụng cách nhau bởi dấu gạch nối (ví dụ: JBSW-Y3DP-EHPK-3PXP) mà không sợ xung đột bộ phân tách biểu thức chính quy (regex).

Biến thể Crockford Base32

Douglas Crockford đã giới thiệu một đặc tả Base32 thay thế được thiết kế cho các giao diện hướng tới người dùng:

  • Ánh xạ các chữ số 0-9 và các chữ cái A-Z, loại trừ I, L, O và U (để ngăn chặn việc vô tình tạo ra các từ ngữ xúc phạm hoặc phản cảm).
  • Giải mã ký tự 0 thành chữ cái O, và các ký tự 1, I, l thành chữ số 1.
  • Bổ sung một ký hiệu kiểm tra modulo 37 tùy chọn ở cuối chuỗi để phát hiện các lỗi sao chép và hoán vị ký tự.

4. Lý do xác thực hai yếu tố và các giao thức phi tập trung bắt buộc dùng Base32

Các đặc tính vận hành của Base32 giải thích lý do tại sao nó được chọn làm định dạng mã hóa bắt buộc cho việc phân phối seed của Time-Based One-Time Password (TOTP), DNSSEC và các giao thức mạng bảo vệ quyền riêng tư.

   AUTHENTICATION PROVISIONING WORKFLOW
   +-------------------------------------------------------------+
   | Authentication Server Generates 160-bit Secret Key (Raw)    |
   +-------------------------------------------------------------+
                                  |
                                  v
   +-------------------------------------------------------------+
   | RFC 4648 Base32 Encoding (No Ambiguous Characters)          |
   | "JBSWY3DPEHPK3PXP"                                          |
   +-------------------------------------------------------------+
              |                                       |
              v                                       v
   [ Optical QR Code Path ]                [ Manual Fallback Path ]
   Encoded into otpauth:// URI             User Types on Mobile Keyboard
   Scanned via Camera Sensor               Case-Insensitive Entry
              |                                       |
              +-------------------+-------------------+
                                  |
                                  v
   +-------------------------------------------------------------+
   | Client Authenticator Derives Identical Big-Endian HMAC Key  |
   +-------------------------------------------------------------+

Hệ sinh thái TOTP / Google Authenticator

Khi cấu hình xác thực đa yếu tố, máy chủ sẽ tạo ra một khóa mật mã ngẫu nhiên 160-bit (20 byte) hoặc 256-bit (32 byte). Mặc dù khóa này thường được quét qua mã QR sử dụng URI otpauth://totp/..., phần cứng máy ảnh thường xuyên gặp sự cố do ống kính bị nứt, ánh sáng môi trường yếu hoặc các hạn chế về thiết bị.

Trong tất cả các tình huống dự phòng, người dùng phải sao chép khóa theo cách thủ công trên bàn phím điện thoại di động. Nếu khóa được mã hóa bằng Base64:

  • Người dùng sẽ buộc phải liên tục chuyển đổi giữa các bố cục bàn phím in hoa, in thường và ký tự đặc biệt.
  • Người dùng chắc chắn sẽ nhầm lẫn 0 với O hoặc l với 1, dẫn đến các lần xác thực thất bại và tài khoản bị khóa.

Bằng cách bắt buộc sử dụng Base32, RFC 6238 đảm bảo rằng khóa có thể được nhập hoàn toàn bằng một kiểu chữ (hoa hoặc thường), đọc rõ ràng qua các kênh hỗ trợ điện thoại, hoặc nhập trên các bàn phím di động có không gian giới hạn mà không gây nhầm lẫn.

Các mạng lưới phi tập trung: Tor và IPFS

  • Tor Onion Services (.onion v3): Địa chỉ onion phiên bản 3 biểu diễn khóa công khai Ed25519 32-byte của dịch vụ ẩn, đi kèm với 2-byte checksum và 1-byte đánh dấu phiên bản. Payload 35-byte kết quả được mã hóa thành một chuỗi Base32 dài 56 ký tự và theo sau bởi đuôi .onion. Do các nhãn Domain Name System (DNS) vốn dĩ không phân biệt chữ hoa, chữ thường, Base32 đảm bảo rằng quá trình phân giải tên miền luôn thành công bất kể người dùng nhập chữ hoa hay chữ thường.
  • IPFS Content Identifiers (CIDv1): Giao thức InterPlanetary File System mã hóa các định danh nội dung đa hàm băm (multi-hash) bằng Base32 (với tiền tố là ký tự multibase b) nhằm đảm bảo các liên kết định danh theo nội dung hoạt động ổn định và chính xác bên trong các thành phần đường dẫn URL tiêu chuẩn.

5. Bộ mã hóa luồng bitwise thông lượng cao trên trình duyệt

Việc xây dựng các tiện ích web hiệu năng cao đòi hỏi phải thực thi các thuật toán mã hóa và giải mã nhị phân sang văn bản trực tiếp ngay trong runtime của trình duyệt client mà không gây rò rỉ bộ nhớ, nghẽn chuỗi trung gian hoặc phát sinh các lượt khứ hồi (roundtrips) về phía server.

                    IN-MEMORY BITWISE STREAM DECODER
   Input String: "JBSWY3DP..."
        |
        v
   [ RFC 4648 Char-to-Index Lookup Table (Uint8Array, 256 Entries) ]
        |
        v
   [ 40-Bit Shift Register (Big-Endian Bit Accumulator) ]
        |
        +---> Bit Count >= 8 ?
        |        |
        |        v
        |     [ Extract Top 8 Bits ] ---> Output Buffer (Uint8Array)
        |     [ Shift Left by 8    ]
        |        |
        +--------+

Bộ giải mã Base32 hiệu năng cao bằng TypeScript

Đoạn mã dưới đây minh họa một phương thức giải mã Base32 thời gian hằng số (constant-time), tối thiểu hóa việc cấp phát bộ nhớ, được thiết kế tối ưu cho quá trình thực thi trên trình duyệt:

// Precomputed RFC 4648 Base32 character mapping table (256 bytes)
const BASE32_DECODE_TABLE = new Uint8Array(256).fill(0xff);
const ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";

for (let i = 0; i < ALPHABET.length; i++) {
  const charCodeUpper = ALPHABET.charCodeAt(i);
  const charCodeLower = ALPHABET.toLowerCase().charCodeAt(i);
  BASE32_DECODE_TABLE[charCodeUpper] = i;
  BASE32_DECODE_TABLE[charCodeLower] = i; // Native case insensitivity
}

/**
 * Decodes an RFC 4648 Base32 string into raw bytes directly in local memory.
 * Ignores padding and whitespace; throws on invalid characters.
 */
export function decodeBase32(encoded: string): Uint8Array {
  // Strip whitespace, hyphens, and padding
  const sanitized = encoded.replace(/[\s\-=]/g, "");
  const length = sanitized.length;

  // Maximum possible byte count: floor(length * 5 / 8)
  const maxBytes = Math.floor((length * 5) / 8);
  const output = new Uint8Array(maxBytes);

  let bitBuffer = 0;
  let bitCount = 0;
  let writeOffset = 0;

  for (let i = 0; i < length; i++) {
    const charCode = sanitized.charCodeAt(i);
    const value = charCode < 256 ? BASE32_DECODE_TABLE[charCode] : 0xff;

    if (value === 0xff) {
      throw new Error(`Invalid Base32 character encountered at index ${i}: ${sanitized[i]}`);
    }

    // Push 5 bits into the accumulator
    bitBuffer = (bitBuffer << 5) | value;
    bitCount += 5;

    // Extract complete 8-bit octets
    if (bitCount >= 8) {
      bitCount -= 8;
      output[writeOffset++] = (bitBuffer >> bitCount) & 0xff;
    }
  }

  // Return exact slice of populated bytes
  return output.subarray(0, writeOffset);
}

Bảng tổng hợp so sánh

Để kết luận, bảng bên dưới tóm tắt các đánh đổi về mặt kiến trúc giữa Base32 và Base64 trên các hệ thống thực tế trong môi trường production:

Tiêu chí kiến trúcBase32 (RFC 4648)Base64 (RFC 4648)
Số bit trên mỗi ký hiệu5 bit6 bit
Độ phình dung lượng lưu trữ+60.0%+33.3%
Phân biệt chữ hoa, chữ thườngKhông (A-Z == a-z)Có (A != a)
An toàn cho URL theo mặc địnhCó (Không chứa ký tự đặc biệt)Không (Cần thay thế + và /)
Khả năng chép tay của con ngườiXuất sắcKém (Tỷ lệ nhầm lẫn và đảo vị trí cao)
Lượng tử đệm (Padding Quantum)40 bit (5 byte sang 8 ký tự)24 bit (3 byte sang 4 ký tự)
Lĩnh vực sử dụng chínhTOTP, Tor Onion, DNSSEC, CLIThân HTTP, Thư MIME, Data URI

Bằng cách thực thi các phép biến đổi nhị phân này hoàn toàn ở phía client-side thông qua các tiện ích trên trình duyệt của PetexSpace, các ứng dụng web duy trì được tốc độ phản hồi tức thì, đồng thời đảm bảo rằng các khóa seed mật mã học cá nhân, cấu trúc tuần tự hóa và các payload dữ liệu luôn được an toàn trong môi trường thực thi của người dùng.

CryptographyData EncodingMã QR

Giải phẫu mã QR: Cơ chế sửa lỗi Reed-Solomon và mã hóa ma trận

Khám phá chuyên sâu về mặt toán học của mã QR chuẩn ISO/IEC 18004, phân tích chi tiết số học trường Galois GF(2^8), đa thức sinh, cơ chế sửa lỗi Reed-Solomon và kỹ thuật kết xuất ma trận ngay trên trình duyệt.

PetexSpace
CryptographyXác thựcSecurity

Kiến trúc của Mật khẩu Một lần Dựa trên Thời gian: Khám phá RFC 6238 và Cơ chế Tạo HMAC

Phân tích toán học và giao thức toàn diện về Mật khẩu Một lần Dựa trên Thời gian (TOTP) theo chuẩn RFC 6238, khám phá kỹ thuật dynamic truncation, bộ đếm bước HMAC-SHA1, xử lý lệch đồng hồ và thực thi an toàn ngay trên trình duyệt.

PetexSpace
CryptographyWeb CryptoSecurity

Tính ngẫu nhiên mật mã học trong trình duyệt: Math.random so với crypto.getRandomValues

Nghiên cứu chuyên sâu về kiến trúc giữa bộ tạo số giả ngẫu nhiên (PRNG) và bộ tạo số giả ngẫu nhiên an toàn về mặt mật mã (CSPRNG) trong môi trường runtime trình duyệt, phân tích chi tiết xorshift128+, các cuộc tấn công tái tạo trạng thái và Web Cryptography API.

PetexSpace
CryptographyXác thựcKhóa truy cập

Passkey so với TOTP: Bước chuyển dịch mật mã học từ khóa bí mật dùng chung sang chữ ký khóa công khai

Phân tích kiến trúc và bảo mật so sánh giữa Mật khẩu một lần dựa trên thời gian RFC 6238 với Passkey FIDO2/WebAuthn, đi sâu vào khả năng chống tấn công phi kỹ thuật Adversary-in-the-Middle và ràng buộc nguồn gốc.

PetexSpace