Thứ Năm, 31 tháng 5, 2018

Cryptography - Mật mã hóa là gì?

Cryptography


Cryptography, được dịch là "mật mã học", là một ngành có nhiều thuật ngữ có thể làm cho nhiều người "ngơ ngác": như "hash function", "one-time pad" hay Rijndael... Bài viết này giải thích các khái niệm thường dùng trong ngành mật mã học, hy vọng có thể giúp ích cho những ai mong muốn tìm hiểu về lĩnh vực này.

Cryptography (hay crypto) - mật mã học – ngành khoa học nghiên cứu về việc giấu thông tin. Cụ thể hơn, mật mã học là ngành học nghiên cứu về những cách chuyển đổi thông tin từ dạng "có thể hiểu được" thành dạng "không thể hiểu được" và ngược lại. Cryptography giúp đảm bảo những tính chất sau cho thông tin:

• Tính bí mật (confidentiality): thông tin chỉ được tiết lộ cho những ai được phép.
• Tính toàn vẹn (integrity): thông tin không thể bị thay đổi mà không bị phát hiện.
• Tính xác thực (authentication): người gửi (hoặc người nhận) có thể chứng minh đúng họ.
• Tính không chối bỏ (non-repudiation): người gửi hoặc nhận sau này không thể chối bỏ việc đã gửi hoặc nhận thông tin.

Mật mã có rất nhiều ứng dụng trong thực tế như bảo vệ giao dịch tài chính (rút tiền ngân hàng, mua bán qua mạng), bảo vệ bí mật cá nhân... Nếu kẻ tấn công đã vượt qua tường lửa và các hệ thống bảo vệ khác thì mật mã chính là hàng phòng thủ cuối cùng cho dữ liệu của bạn.

Cần phân biệt khái niệm cryptography với khái niệm steganography (tạm dịch là giấu thông tin). Điểm khác nhau căn bản nhất giữa hai khái niệm này là: cryptography là việc giấu nội dung của thông tin, trong khi steganography là việc giấu sự tồn tại của thông tin đó.
- Cryptosystem (viết tắt của cryptographic system): hệ thống mã hóa thông tin, có thể là phần mềm như PGP, Ax-Crypt, Truecrypt... giao thức như SSL, IPsec... hay đơn giản là một thuật toán như DES.
- Encrypt (encipher): mã hóa – quá trình biến đổi thông tin từ dạng ban đầu - có thể hiểu được thành dạng không thể hiểu được, với mục đích giữ bí mật thông tin đó.
- Decrypt (decipher): giải mã – quá trình ngược lại với mã hóa, khôi phục lại thông tin ban đầu từ thông tin đã được mã hóa.
- Plaintext (cleartext): dữ liệu gốc (chưa được mã hóa).
- Ciphertext: dữ liệu đã được mã hóa.

Lưu ý: từ text (hay message) ở đây được dùng theo quy ước, được hiểu là tất cả những dữ liệu được mã hóa (hay giải mã) chứ không chỉ là văn bản chữ như nghĩa thông thường. Khi dịch ra tiếng Việt, từ "văn bản" và từ "thông điệp" cũng tuân theo quy ước tương tự.

- Cipher (hay cypher): thuật toán dùng để thực hiện quá trình mã hóa hay giải mã. Trong khuôn khổ bài viết này gọi tắt là thuật toán.
- Key: chìa khóa – thông tin dùng cho qui trình mã hóa và giải mã. 

Code: cần phân biệt code trong mật mã học với code trong lập trình hay code trong Zip code... Trong cryptography, code (mã) có ý nghĩa gần như là cipher (thuật toán). Chúng chỉ khác nhau ở chỗ: code biến đổi thông tin ở tầng nghĩa (từ, cụm từ) còn cipher biến đổi thông tin ở tầng thấp hơn, ví dụ chữ cái (hoặc cụm chữ cái) đối với các thuật toán cổ điển hay từng bit (hoặc nhóm bit) đối với các thuật toán hiện đại.

Cryptanalysis: nếu coi mật mã học là việc cất dữ liệu của bạn vào một cái hộp sau đó dùng chìa khóa khóa lại, thì cryptanalysis là ngành nghiên cứu những phương pháp mở hộp để xem dữ liệu khi không có chìa khóa.

KHÁI NIỆM VỀ CHÌA KHÓA

Password: mật khẩu, là một hay nhiều từ mà người dùng phải biết để được cấp quyền truy cập.
Trong thực tế, mật khẩu do người dùng tạo ra thường không đủ độ an toàn để được dùng trực tiếp trong thuật toán. Vì vậy, trong bất cứ hệ thống mã hóa dữ liệu nghiêm túc nào cũng phải có bước chuyển đổi mật khẩu ban đầu thành chìa khóa có độ an toàn thích hợp. Bước tạo chìa khóa này thường được gọi là key derivation, key stretching hay key initialization.

Key Derivation Function: là một hàm hash (sẽ giải thích rõ hơn ở phần sau) được thiết kế sao cho chìa an toàn hơn đối với tấn công kiểu brute-force hay cổ điển. Hàm này được thực hiện lại nhiều lần trên mật khẩu ban đầu cùng với một số ngẫu nhiên để tạo ra một chìa khóa có độ an toàn cao hơn. Số ngẫu nhiên này gọi là salt, còn số lần lặp lại là iteration.

Ví dụ một mật khẩu là "pandoras B0x", cùng với salt là "230391827", đi qua hàm hash SHA-1 1000 lần cho kết quả là một chìa khóa có độ dài 160 bit như sau: 3BD454A72E0E7CD6959DE0580E3C19F51601C359 (thể hiện dưới dạng số thập lục phân).

Keylength (Keysize): Độ dài (hay độ lớn) của chìa khóa. Nói một chìa khóa có độ dài 128 bit có nghĩa chìa đó là một số nhị phân có độ dài 128 chữ số. Một thuật toán có chìa khóa càng dài thì càng có nhiều khả năng chống lại tấn công kiểu brute-force.

THUẬT TOÁN MÃ HÓA

- Cổ điển
• Substitution: thay thế – phương pháp mã hóa trong đó từng kí tự (hoặc từng nhóm kí tự) của văn bản ban đầu được thay thế bằng một (hay một nhóm) kí tự khác. Tuy không còn được sử dụng nhưng ý tưởng của phương pháp này vẫn được tiếp tục trong những thuật toán hiện đại.

• Transposition: hoán vị – phương pháp mã hóa trong đó các kí tự trong văn bản ban đầu chỉ thay đổi vị trí cho nhau còn bản thân các kí tự không hề bị biến đổi.

- Hiện đại
• Symmetric cryptography: mã hóa đối xứng, tức là cả hai quá trình mã hóa và giải mã đều dùng một chìa khóa. Để đảm bảo tính an toàn, chìa khóa này phải được giữ bí mật. Vì thế các thuật toán loại này còn có tên gọi khác là secret key cryptography (hay private key cryptography), tức là thuật toán mã hóa dùng chìa khóa riêng (hay bí mật). Các thuật toán loại này lý tưởng cho mục đích mã hóa dữ liệu của cá nhân hay tổ chức đơn lẻ nhưng bộc lộ hạn chế khi thông tin đó phải được chia sẻ với một bên thứ hai. 

Giả sử nếu Alice chỉ gửi thông điệp đã mã hóa cho Bob mà không hề báo trước về thuật toán sử dụng, Bob sẽ chẳng hiểu Alice muốn nói gì. Vì thế bắt buộc Alice phải thông báo cho Bob về chìa khóa và thuật toán sử dụng tại một thời điểm nào đó trước đấy. Alice có thể làm điều này một cách trực tiếp (mặt đối mặt) hay gián tiếp (gửi qua email, tin nhắn...). Điều này dẫn tới khả năng bị người thứ ba xem trộm chìa khóa và có thể giải mã được thông điệp Alice mã hóa gửi cho Bob.

Mã hóa đối xứng có thể phân thành hai nhóm phụ:

- Block ciphers: thuật toán khối – trong đó từng khối dữ liệu trong văn bản ban đầu được thay thế bằng một khối dữ liệu khác có cùng độ dài. Độ dài mỗi khối gọi là block size, thường được tính bằng đơn vị bit. Ví dụ thuật toán 3-Way có kích thước khối bằng 96 bit.

- Stream ciphers: thuật toán dòng – trong đó dữ liệu đầu vào được mã hóa từng bit một. Các thuật toán dòng có tốc độ nhanh hơn các thuật toán khối, được dùng khi khối lượng dữ liệu cần mã hóa chưa được biết trước, ví dụ trong kết nối không dây. Có thể coi thuật toán dòng là thuật toán khối với kích thước mỗi khối là 1 bit.

• Asymmetric cryptography: mã hóa bất đối xứng, sử dụng một cặp chìa khóa có liên quan với nhau về mặt toán học, một chìa công khai dùng để mã hoá (public key) và một chìa bí mật dùng để giải mã (private key). Một thông điệp sau khi được mã hóa bởi chìa công khai sẽ chỉ có thể được giải mã với chìa bí mật tương ứng. Do các thuật toán loại này sử dụng một chìa khóa công khai (không bí mật) nên còn có tên gọi khác là public-key cryptography (thuật toán mã hóa dùng chìa khóa công khai).

Quay lại với Alice và Bob, nếu Alice muốn gửi một thông điệp bí mật tới Bob, cô ta sẽ tìm chìa công khai của Bob. Sau khi kiểm tra chắc chắn chìa khóa đó chính là của Bob chứ không của ai khác (thông qua chứng chỉ điện tử – digital certificate), Alice dùng nó để mã hóa thông điệp của mình và gửi tới Bob. Khi Bob nhận được bức thông điệp đã mã hóa anh ta sẽ dùng chìa bí mật của mình để giải mã nó. Nếu giải mã thành công thì bức thông điệp đó đúng là dành cho Bob. Alice và Bob trong trường hợp này có thể là hai người chưa từng quen biết. Một hệ thống như vậy cho phép hai người thực hiện được giao dịch trong khi không chia sẻ trước một thông tin bí mật nào cả.

Một trong những hạn chế của các thuật toán mã hóa bất đối xứng là tốc độ chậm, do đó trong thực tế người ta thường sử dụng một hệ thống lai tạp trong đó dữ liệu được mã hóa bởi một thuật toán đối xứng, chỉ có chìa dùng để thực hiện việc mã hóa này mới được mã hóa bằng thuật toán bất đối xứng.

MỘT SỐ PHƯƠNG PHÁP TẤN CÔNG HỆ THỐNG THÔNG TIN MÃ HÓA
Bất cứ ai cũng có thể tạo ra một hệ thống thông tin mã hóa cho riêng mình. Nhưng để có một hệ thống an toàn và hiệu quả đòi hỏi người thiết kế phải có kiến thức toán học sâu sắc, có kinh nghiệm về bảo mật và am hiểu các phương pháp tấn công. 
• Brute-force attack (exhaustive key search): phương pháp tấn công bằng cách thử tất cả những chìa khóa có thể có. Đây là phương pháp tấn công thô sơ nhất và cũng khó khăn nhất.
Theo lý thuyết, tất cả các thuật toán hiện đại đều có thể bị đánh bại bởi brute-force nhưng trong thực tiễn việc này chỉ có thể thực hiện được trong thời gian hàng triệu, thậm chí hàng tỉ năm. Vì thế có thể coi một thuật toán là an toàn nếu như không còn cách nào khác để tấn công nó dễ hơn là brute-force.
Ví dụ: Thuật toán DES có độ dài chìa khóa là 56 bit tức là có tổng cộng tất cả 256 chìa để dùng. Nếu ai đó muốn "bẻ khoá” DES bằng cách thử hàng loạt chìa (brute-force attack) thì sẽ phải thử đến 256 lần (khoảng hơn 70 triệu tỉ lần). 
• Frequency analysis: thống kê tần suất, chỉ có thể áp dụng được đối với các thuật toán cổ điển dùng phương pháp thay thế, ví dụ phương pháp Caesar. Để thực hiện phương pháp này ta cần một lượng văn bản đã mã hóa đủ lớn để phép thống kê được chính xác. Ngoài ra còn phải biết ngôn ngữ sử dụng trong văn bản ban đầu, nếu văn bản ban đầu là tiếng Anh thì nhiều khả năng kí tự xuất hiện nhiều nhất trong văn bản đã mã hóa là do chữ e mã hóa thành, kí tự nhiều thứ nhì bắt nguồn từ chữ a...
• Differential cryptanalysis: Eli Biham và Adi Shamir tìm ra phương pháp này vào khoảng cuối những năm 1980; nó thường được sử dụng để tấn công các thuật toán khối (block cipher - sẽ nói rõ hơn ở phần sau). Phương pháp này dựa trên việc phân tích những biến đổi của hai văn bản gốc có liên quan khi được mã hóa bởi cùng một chìa. 
Còn rất nhiều phương pháp khác như Mod-n cryptanalysis, Linear cryptanalysis, Birthday attack, Algebraic attack... mà bất cứ ai thiết kế hệ thống mã hóa cũng phải chú ý tới.
Một số thuật toán nổi tiếng

• One-time Pad (OTP): xuất hiện từ đầu thế kỉ 20 và còn có tên gọi khác là Vernam Cipher, OTP được mệnh danh là cái chén thánh của ngành mã hóa dữ liệu. OTP là thuật toán duy nhất chứng minh được về lý thuyết là không thể phá được ngay cả với tài nguyên vô tận (tức là có thể chống lại kiểu tấn công brute-force). Để có thể đạt được mức độ bảo mật của OTP, tất cả những điều kiện sau phải được thỏa mãn:
- Độ dài của chìa khóa phải đúng bằng độ dài văn bản cần mã hóa.
- Chìa khóa chỉ được dùng một lần.
- Chìa khóa phải là một số ngẫu nhiên thực.

Mới nghe qua có vẻ đơn giản nhưng trong thực tế những điều kiện này khó có thể thỏa mãn được. Giả sử Alice muốn mã hóa chỉ 10MB dữ liệu bằng OTP, cô ta phải cần một chìa khóa có độ dài 10MB. Để tạo ra một số ngẫu nhiên lớn như vậy Alice cần một bộ tạo số ngẫu nhiên thực (TRNG - True Random Number Generator). Các thiết bị này sử dụng nguồn ngẫu nhiên vật lý như sự phân rã hạt nhân hay bức xạ nền vũ trụ. Hơn nữa việc lưu trữ, chuyển giao và bảo vệ một chìa khóa như vậy cũng hết sức khó khăn.

Dễ dàng hơn, Alice cũng có thể dùng một bộ tạo số ngẫu nhiên ảo (PRNG - Pseudo Random Number Generator) nhưng khi đó mức độ bảo mật giảm xuống gần bằng zero hay cùng lắm chỉ tương đương với một thuật toán dòng như RC4 mà thôi.
Do có những khó khăn như vậy nên việc sử dụng OTP trong thực tế là không khả thi. 

• DES: viết tắt của Data Encryption Standard. DES là một thuật toán khối với kích thước khối 64 bit và kích thước chìa 56 bit. Tiền thân của nó là Lucifer, một thuật toán do IBM phát triển. Cuối năm 1976, DES được chọn làm chuẩn mã hóa dữ liệu của nước Mỹ, sau đó được sử dụng rộng rãi trên toàn thế giới. DES cùng với mã hóa bất đối xứng đã mở ra một thời kì mới cho ngành mã hóa thông tin. Trước DES, việc nghiên cứu và sử dụng mã hóa dữ liệu chỉ giới hạn trong chính phủ và quân đội. Từ khi có DES, các sản phẩm sử dụng nó tràn ngập thị trường. Đồng thời, việc nghiên cứu mã hóa thông tin cũng không còn là bí mật nữa mà đã trở thành một ngành khoa học máy tính bình thường. 

Trong khoảng 20 năm sau đó, DES đã trải qua nhiều khảo sát, phân tích kỹ lưỡng và được công nhận là an toàn đối với các dạng tấn công (tất nhiên, ngoại trừ brute-force).

Tới tháng 7 năm 1998, EFF (Electronic Frontier Foundation) đã "brute-force" thành công DES trong 56 giờ. Ít lâu sau đó cùng với mạng tính toán ngang hàng Distribute.net, tổ chức này đã lập nên kỉ lục mới là 22 giờ 15 phút. Sự kiện này chứng tỏ cỡ chìa 56 bit của DES đã lỗi thời và cần được thay thế.

• AES: viết tắt của Advance Encryption Standard. Tháng 12 năm 1997, viện tiêu chuẩn và công nghệ Mỹ (NIST – National Institute of Standard and Technology) kêu gọi phát triển một thuật toán mới thay thế cho 3DES (một biến thể an toàn hơn của DES với chìa khóa dài 112 bit). Thuật toán được chọn phải là thuật toán khối có kích thước khối là 128 bit, hỗ trợ chìa khóa có kích thước 128 bit, 192 bit và 256 bit.

15 thuật toán được gửi đến từ nhiều nơi trên thế giới, 5 thuật toán lọt vào vòng hai: Rijndael, Twofish, Serpent, RC6 và MARS. Tháng 11 năm 2001, Rijndael đuợc chọn làm AES (một phần nhờ có tốc độ nhanh hơn so với các đối thủ), chính thức thay thế DES trong vai trò chuẩn mã hóa dữ liệu.

• RSA: là một thuật toán mã hóa bất đối xứng được sử dụng rất rộng rãi trong giao dịch điện tử. Cái tên RSA có nguồn gốc từ ba chữ cái đầu của tên ba người đồng thiết kế ra nó: Ronald Rivest, Adi Shamir và Leonard Adleman.
Ngoài ra còn nhiều thuật toán khác nhưng do khuôn khổ bài viết có hạn nên không thể đi sâu, mà chỉ liệt kê một số thuật toán thông dụng:

Các thuật toán đối xứng:
• Thuật toán dòng: RC4, A5/1, A5/2, Chameleon...
• Thuật toán khối: 3DES, RC5, RC6, 3-Way, CAST, Camelia, Blowfish, MARS, Serpent, Twofish, GOST...

Các thuật toán bất đối xứng: Elliptic Curve, ElGamal, Diffie Hellman...

HÀM HASH
Hàm hash (hash function) là hàm một chiều mà nếu đưa một lượng dữ liệu bất kì qua hàm này sẽ cho ra một chuỗi có độ dài cố định ở đầu ra.
Ví dụ, từ "Illuminatus" đi qua hàm SHA-1 cho kết quả E783A3AE2ACDD7DBA5E1FA0269CBC58D. 
Ta chỉ cần đổi "Illuminatus" thành "Illuminati" (chuyển "us" thành "i") kết quả sẽ trở nên hoàn toàn khác (nhưng vẫn có độ dài cố định là 160 bit) A766F44DDEA5CACC3323CE3E7D73AE82. 

Hai tính chất quan trọng của hàm này là:
• Tính một chiều: không thể suy ra dữ liệu ban đầu từ kết quả, điều này tương tự như việc bạn không thể chỉ dựa vào một dấu vân tay lạ mà suy ra ai là chủ của nó được.
• Tính duy nhất: xác suất để có một vụ va chạm (hash collision), tức là hai thông điệp khác nhau có cùng một kết quả hash, là cực kì nhỏ.

Một số ứng dụng của hàm hash:
• Chống và phát hiện xâm nhập: chương trình chống xâm nhập so sánh giá trị hash của một file với giá trị trước đó để kiểm tra xem file đó có bị ai đó thay đổi hay không.
• Bảo vệ tính toàn vẹn của thông điệp được gửi qua mạng bằng cách kiểm tra giá trị hash của thông điệp trước và sau khi gửi nhằm phát hiện những thay đổi cho dù là nhỏ nhất. 
• Tạo chìa khóa từ mật khẩu.
• Tạo chữ kí điện tử.
SHA-1 và MD5 là hai hàm hash thông dụng nhất và được sử dụng trong rất nhiều hệ thống bảo mật. Vào tháng 8 năm 2004, tại hội nghị Crypto 2004, người ta đã tìm thấy va chạm đối với MD5 và SHA-0, một phiên bản yếu hơn của hàm hash SHA-1. Không bao lâu sau đó, vào khoảng giữa tháng 2 năm 2005, một nhóm ba nhà mật mã học người Trung Quốc đã phát hiện ra một phương pháp có thể tìm thấy va chạm đối với SHA-1 chỉ trong vòng 269 bước tính toán (tức là có thể nhanh hơn brute-force vài nghìn lần).
Người dùng bình thường cũng không cần phải hoảng sợ trước những phát hiện này bởi vì ít nhất phải một vài năm nữa người ta mới có khả năng mang những kết quả đó vào trong thực tế. Tuy vậy, các chuyên gia vẫn khuyên nên bắt đầu chuyển sang các hàm hash an toàn hơn như SHA-256, SHA-384 hay SHA-512.

IPsec (IP security) là gì?

IPsec (IP security) là gì?

IPsec (IP security) bao gồm một hệ thống các giao thức để bảo mật quá trình truyền thông tin trên nền tảng Internet Protocol (IP). Bao gồm xác thực và/hoặc mã hoá (Authenticating and/or Encrypting) cho mỗi gói IP (IP packet) trong quá trình truyền thông tin. IPsec cũng bao gồm những giao thức cung cấp cho mã hoá và xác thực.

1. Tổng quan



Giao thức IPsec được làm việc tại tầng Network Layer – layer 3 của mô hình OSI. Các giao thức bảo mật trên Internet khác như SSL, TLS và SSH, được thực hiện từ tầng transport layer trở lên (Từ tầng 4 tới tầng 7 mô hình OSI). Điều này tạo ra tính mềm dẻo cho IPsec, giao thức này có thể hoạt động từ tầng 4 với TCP, UDP, hầu hết các giao thức sử dụng tại tầng này. IPsec có một tính năng cao cấp hơn SSL và các phương thức khác hoạt động tại các tầng trên của mô hình OSI. Với một ứng dụng sử dụng IPsec mã (code) không bị thay đổi, nhưng nếu ứng dụng đó bắt buộc sử dụng SSL và các giao thức bảo mật trên các tầng trên trong mô hình OSI thì đoạn mã ứng dụng đó sẽ bị thay đổi lớn.

2. Cấu trúc bảo mật

Khi IPsec được triển khai, cấu trúc bảo mật của nó gồm:

(1) Sử dụng các giao thức cung cấp mật mã (cryptographic protocols) nhằm bảo mật gói tin (packet) trong quá trình truyền
(2) Cung cấp phương thức xác thực
(3) Thiết lập các thông số mã hoá.

Xây dựng IPsec sử dụng khái niệm về bảo mật trên nền tảng IP. Một sự kết hợp bảo mật rất đơn giản khi kết hợp các thuật toán và các thông số (ví như các khoá – keys) là nền tảng trong việc mã hoá và xác thực trong một chiều. Tuy nhiên trong các giao tiếp hai chiều, các giao thức bảo mật sẽ làm việc với nhau và đáp ứng quá trình giao tiếp. Thực tế lựa chọn các thuật toán mã hoá và xác thực lại phụ thuộc vào người quản trị IPsec bởi IPsec bao gồm một nhóm các giao thức bảo mật đáp ứng mã hoá và xác thực cho mỗi gói tin IP.

Trong các bước thực hiện phải quyết định cái gì cần bảo vệ và cung cấp cho một gói tin outgoing (đi ra ngoài), IPsec sử dụng các thông số Security Parameter Index (SPI), mỗi quá trình Index (đánh thứ tự và lưu trong dữ liệu – Index ví như một cuốn danh bạ điện thoại) bao gồm Security Association Database (SADB), theo suốt chiều dài của địa chỉ đích trong header của gói tin, cùng với sự nhận dạng duy nhất của một thoả hiệp bảo mật (tạm dịch từ – security association) cho mỗi gói tin. Một quá trình tương tự cũng được làm với gói tin đi vào (incoming packet), nơi IPsec thực hiện quá trình giải mã và kiểm tra các khoá từ SADB.

Cho các gói multicast, một thoả hiệp bảo mật sẽ cung cấp cho một group, và thực hiện cho toàn bộ các receiver trong group đó. Có thể có hơn một thoả hiệp bảo mật cho một group, bằng cách sử dụng các SPI khác nhau, tuy nhiên nó cũng cho phép thực hiện nhiều mức độ bảo mật cho một group. Mỗi người gửi có thể có nhiều thoả hiệp bảo mật, cho phép xác thực, trong khi người nhận chỉ biết được các keys được gửi đi trong dữ liêu. Chú ý các chuẩn không miêu tả làm thế nào để các thoả hiệp và lựa chọn việc nhân bản từ group tới các cá nhân.

3. Hiện trạng

IPsec là một phần bắt bưộc của IPv6, có thể được lựa chọn khi sử dụng IPv4. Trong khi các chuẩn đã được thiết kết cho các phiên bản IP giống nhau, phổ biến hiện nay là áp dụng và triển khai trên nền tảng IPv4.

Các giao thức IPsec được định nghĩa từ RFCs 1825 – 1829, và được phổ biến năm 1995. Năm 1998, được nâng cấp với các phiên bản RFC 2401 – 2412, nó không tương thích với chuẩn 1825 – 1929. Trong tháng 12 năm 2005, thế hệ thứ 3 của chuẩn IPSec, RFC 4301 – 4309. Cũng không khác nhiều so với chuẩn RFC 2401 – 2412 nhưng thế hệ mới được cung cấp chuẩn IKE second. Trong thế hệ mới này IP security cũng được viết tắt lại là IPsec.
Sự khác nhau trong quy định viết tắt trong thế hệ được quy chuẩn bởi RFC 1825 – 1829 là ESP còn phiên bản mới là ESPbis.

4. Thiết kế theo yêu cầu.

IPsec được cung cấp bởi Transport mode (end-to-end) đáp ứng bảo mật giữa các máy tính giao tiếp trực tiếp với nhau hoặc sử dụng Tunnel mode (portal-to-portal) cho các giao tiếp giữa hai mạng với nhau và chủ yếu được sử dụng khi kết nối VPN.

IPsec có thể được sử dụng trong các giao tiếp VPN, sử dụng rất nhiều trong giao tiếp. Tuy nhiên trong việc triển khai thực hiện sẽ có sự khác nhau giữa hai mode này.
Giao tiếp end-to-end được bảo mật trong mạng Internet được phát triển chậm và phải chờ đợi rất lâu. Một phần bở lý do tính phổ thông của no không cao, hay không thiết thực, Public Key Infrastructure (PKI) được sử dụng trong phương thức này.

IPsec đã được giới thiệu và cung cấp các dịch vụ bảo mật:

1. Mã hoá quá trình truyền thông tin
2. Đảm bảo tính nguyên vẹn của dữ liệu
3. Phải được xác thực giữa các giao tiếp
4. Chống quá trình replay trong các phiên bảo mật.
5. Modes – Các mode

Có hai mode khi thực hiện IPsec đó là: Transport mode và tunnel mode.

Transport mode

Trong Transport mode, chỉ những dữ liệu bạn giao tiếp các gói tin được mã hoá và/hoặc xác thực. Trong quá trình routing, cả IP header đều không bị chỉnh sửa hay mã hoá; tuy nhiên khi authentication header được sử dụng, địa chỉ IP không thể biết được, bởi các thông tin đã bị hash (băm). Transport và application layers thường được bảo mật bởi hàm băm (hash), và chúng không thể chỉnh sửa (ví dụ như port number). Transport mode sử dụng trong tình huống giao tiếp host-to-host.
Điều này có nghĩa là đóng gói các thông tin trong IPsec cho NAT traversal được định nghĩa bởi các thông tin trong tài liệu của RFC bởi NAT-T.

Tunnel mode

Trong tunnel mode, toàn bộ gói IP (bao gồm cả data và header) sẽ được mã hoá và xác thực. Nó phải được đóng gói lại trong một dạng IP packet khác trong quá trình routing của router. Tunnel mode được sử dụng trong giao tiếp network-to-network (hay giữa các routers với nhau), hoặc host-to-network và host-to-host trên internet.

5. Technical details.

Có hai giao thức được phát triển và cung cấp bảo mật cho các gói tin của cả hai phiên bản IPv4 và IPv6:
IP Authentication Header giúp đảm bảo tính toàn vẹn và cung cấp xác thực.
IP Encapsulating Security Payload cung cấp bảo mật, và là option bạn có thể lựa chọn cả tính năng authentication và Integrity đảm bảo tính toàn vẹn dữ liệu.

Thuật toán mã hoá được sử dụng trong IPsec bao gồm HMAC-SHA1 cho tính toàn vẹn dữ liệu (integrity protection), và thuật toán TripleDES-CBC và AES-CBC cho mã mã hoá và đảm bảo độ an toàn của gói tin. Toàn bộ thuật toán này được thể hiện trong RFC 4305.

a. Authentication Header (AH)

AH được sử dụng trong các kết nối không có tính đảm bảo dữ liệu. Hơn nữa nó là lựa chọn nhằm chống lại các tấn công replay attack bằng cách sử dụng công nghệ tấn công sliding windows và discarding older packets. AH bảo vệ quá trình truyền dữ liệu khi sử dụng IP. Trong IPv4, IP header có bao gồm TOS, Flags, Fragment Offset, TTL, và Header Checksum. AH thực hiện trực tiếp trong phần đầu tiên của gói tin IP. dưới đây là mô hình của AH header.
Các modes thực hiện

Ý nghĩa của từng phần:
Next header: Nhận dạng giao thức trong sử dụng truyền thông tin.
Payload length: Độ lớn của gói tin AH.
RESERVED: Sử dụng trong tương lai (cho tới thời điểm này nó được biểu diễn bằng các số 0).

Security parameters index (SPI): Nhận ra các thông số bảo mật, được tích hợp với địa chỉ IP, và nhận dạng các thương lượng bảo mật được kết hợp với gói tin.
Sequence number: Một số tự động tăng lên mỗi gói tin, sử dụng nhằm chống lại tấn công dạng replay attacks.
Authentication data: Bao gồm thông số Integrity check value (ICV) cần thiết trong gói tin xác thực.

b. Encapsulating Security Payload (ESP)

Giao thức ESP cung cấp xác thực, độ toàn vẹn, đảm bảo tính bảo mật cho gói tin. ESP cũng hỗ trợ tính năng cấu hình sử dụng trong tính huống chỉ cần bảo mã hoá và chỉ cần cho authentication, nhưng sử dụng mã hoá mà không yêu cầu xác thực không đảm bảo tính bảo mật. Không như AH, header của gói tin IP, bao gồm các option khác. ESP thực hiện trên top IP sử dụng giao thức IP và mang số hiệu 50 và AH mang số hiệu 51.

Ý nghĩa của các phần:
Security parameters index (SPI): Nhận ra các thông số được tích hợp với địa chỉ IP.
Sequence number:Tự động tăng có tác dụng chống tấn công kiểu replay attacks.

Payload data: Cho dữ liệu truyền đi
Padding: Sử dụng vài block mã hoá
Pad length: Độ lớn của padding.
Next header: Nhận ra giao thức được sử dụng trong quá trình truyền thông tin.
Authentication data: Bao gồm dữ liệu để xác thực cho gói tin.

6. Implementations – thực hiện


IPsec được thực hiện trong nhân với các trình quản lý các key và quá trình thương lượng bảo mật ISAKMP/IKE từ người dùng. Tuy nhiên một chuẩn giao diện cho quản lý key, nó có thể được điều khiển bởi nhân của IPsec.

Bởi vì được cung cấp cho người dùng cuối, IPsec có thể được triển khai trên nhân của Linux. Dự án FreeS/WAN là dự án đầu tiên hoàn thành việc thực hiện IPsec trong mã nguồn mở cụ thể là Linux. Nó bao gồm một nhấn IPsec stack (KLIPS), kết hợp với trình quản lý key là deamon và rất nhiều shell scripts. Dự án FreeS/WAN được bắt đầu vào tháng 3 năm 2004. Openswan và strongSwan đã tiếp tục dự án FreeS/WAN. Dự án KAME cũng hoàn thành việc triển khai sử dụng IPsec cho NetBSB, FreeBSB. Trình quản lý các khoá được gọi là racoon. OpenBSB được tạo ra ISAKMP/IKE, với tên đơn giản là isakmpd (nó cũng được triển khai trên nhiều hệ thống, bao gồm cả hệ thống Linux).


Unit 2...Kiểu dữ liệu trong C

Kiểu dữ liệu trong C

Trong ngôn ngữ lập trình C, các kiểu dữ liệu ám chỉ phần mở rộng của hệ thống được sử dụng cho khai báo biến với cái kiểu khác nhau. Kiểu của biến xác định lượng bộ nhớ được dùng để lưu biến đó và cách các bit được lưu trữ khi được thông dịch.

Các kiểu biến trong C được phân chia như sau:
1. Kiểu số nguyên (kiểu int) trong C

Bạn có thể lấy cỡ chính xác của các kiểu của các biến trên những nền tảng cụ thể, bạn có thể sử dụng toán tử sizeof. Biểu thức sizeof(kieu) trả về cỡ của đối tượng hoặc kiểu dưới dạng byte. Dưới đây là ví dụ để lấy về size của đối tượng int trên bất kỳ máy tính nào.

#include <stdio.h>
#include <limits.h>

int main()
{
   printf("Kich co luu tru cho so nguyen (int) la: %d \n", sizeof(int));
   
   return 0;
}
Biên dịch và chạy chương trình C trên sẽ cho kết quả:

Kich co luu tru cho so nguyen (int) la: 4

2. Kiểu số thực dấu chấm động (Floating-Point) trong C

Bảng dưới đây đưa cho bạn những hiểu biết cụ thể về các kiểu số thực dấu chấm động tiêu chuẩn với cỡ lưu trữ và dải giá trị cũng như độ chính xác:

float.h trong Header file định nghĩa các macro cho phép bạn sử dụng các giá trị này và các kiểu cụ thể khác về giá trị biểu diễn nhị phân của số thực trong chương trình của bạn. Dưới đây là ví dụ sẽ in ra cỡ của kiểu float cũng như dải giá trị của nó:
#include <stdio.h>
#include <float.h>

int main()
{
   printf("Lop luu tru cho so thuc (float) la: %d \n", sizeof(float));
   printf("Gia tri so thuc duong nho nhat la: %E\n", FLT_MIN );
   printf("Gia tri so thuc duong lon nhat la: %E\n", FLT_MAX );
   printf("Do chinh xac: %d\n", FLT_DIG );
   
   return 0;
}

3. Kiểu void trong C
Kiểu void xác định không có giá trị nào. Nó được sử dụng trong 3 trường hợp sau đây:
STTKiểu và miêu tả
1Hàm trả về void
Có rất nhiều hàm trong ngôn ngữ C mà không trả về dữ liệu nào và bạn có thể nói rằng đó là hàm void. Một hàm mà không trả về giá trị nào có kiểu là void. Ví dụ: void exit (int status);
2Hàm với tham số void
Có những hàm trong C mà không chấp nhận bất kỳ tham số. Một hàm với không có tham số nào có thể chấp nhâu là một void. Ví dụ: int rand(void);
3Con trỏ tới void
Một con trỏ có kiểu void * đại diện cho địa chi của đối tượng, chứ không phải là một kiểu. Ví dụ hàm cấp phát bộ nhớ void *malloc (size_t size); trả về một con trỏ void có thể ép kiểu sang bất kỳ một đối tượng nào.

Unit 1... Cú pháp C cơ bản

Cú pháp C cơ bản

1/ Comment trong C
Chú thích giống như việc trợ giúp trong chương trình C và được bỏ qua bởi bộ biên dịch. Nó bắt đầu với /* và kết thúc với ký tự */ như dưới đây:

/* Day la chuong trinh C dau tien */
Bạn không thể có thêm một phần comment bên trong phần comment này.

Định danh (Identifier) trong C
Một định danh trong C là một tên được sử dụng như một biến, hàm và một thành phần được người dùng định nghĩa. Một định danh có thể bắt đầu bởi các ký tự A đến Z, a đến z và dấu gạch dưới (_) và số 0 đến 9.

C không cho phép các dấu như @, $, và % trong tên định danh. C là ngôn ngữ phân biệt chữ thường - chữ hoa. Do đó, VietJack và vietjack là hai định danh khác nhau trong C. Dưới đây là một vài ví dụ định danh hợp lệ:

nam       hoangminh    abc   ha_noi  a_123
sinhvien   _hocphi  j     d23b5      nhanVien

2/ Các từ khóa trong C

Dưới đây là danh sách các từ khóa được dành riêng trong ngôn ngữ C. Các định danh hay biến, hằng số không thể đặt tên giống các từ khóa dưới đây, nếu không chương trình sẽ báo lỗi.




Thứ Bảy, 26 tháng 5, 2018

MẠNG 4G VÀ 4G LTE KHÁC NHAU THẾ NÀO?

4G là gì?
Về mặt thuật ngữ, nó là thế hệ thứ 4 của công nghệ viễn thông di động không dây (sau 3G). 4G lí tưởng cho các dịch vụ như gọi điện video HD, truyền dữ liệu trực tuyến, lập bản đồ và chơi game trực tuyến nhờ tốc độ download và upload nhanh chóng. Từ góc độ người dùng, hệ thống 4G cung cấp kết nối Internet đáng tin cậy và tốc độ cao trên các thiết bị điện tử như máy tính bảng, điện thoại thông minh…
Lưu ý rằng một mạng di động nhanh hơn mạng 3G hiện tại chưa có nghĩa nó sẽ được gọi là mạng 4G. Để được gọi 4G, nó cần đáp ứng đầy đủ các tiêu chuẩn đã được đặt ra cho mạng này.
Tháng 3/2008, Liên minh viễn thông – radio quốc tế (ITU-R) đã giới thiệu một vài yêu cầu kỹ thuật cho một mạng được gọi là "4G".
Theo các tiêu chuẩn này, một mạng lưới được gọi là 4G khi và chỉ khi dùng một điện thoại thông minh truy cập được với tốc độ 1 Gbps (khi ngồi hoặc di chuyển chậm) hoặc 100 Mbps khi di chuyển bằng xe hơi hoặc tàu hỏa.
ITU-R sau đó sớm nhận ra rằng tiêu chuẩn này quá cao. Hai ứng viên hàng đầu là WIMAX và LTE đều không thể cung cấp tốc độ internet cao như vậy.
Tuy nhiên, ITU-R cho phép họ được tiếp thị như là mạng "4G". Từ đó, mạng LTE bước vào đời sống viễn thông thế giới.
LTE là gì?
LTE là viết tắt của của từ Long-Term Evolution – một tiêu chuẩn truyền thông không dây tốc độ cao. Khi các cơ quan quản lí nhận ra rằng tốc độ tối thiểu cho mạng 4G là xa tầm với, họ cho phép các mạng truyền thông có tốc độ cao hơn 3G được quảng cáo như là mạng 4G hay chính xác là 4G LTE.
Vậy, 4G và 4G LTE có giống nhau không ?
Câu trả lời là không! LTE cung cấp tốc độ thấp hơn nhiều so với một mạng 4G thực sự. Nghĩa là các dịch vụ 4G LTE trên thị trường hiện nay không thực sự đáp ứng được yêu cầu kỹ thuật của một mạng không dây 4G theo quy định của ITU-R. Tuy nhiên, chắc chắn tốc độ của mạng 4G LTE nhanh hơn nhiều so với mạng 3G.
Làm thế nào 4G LTE có thể cung cấp các cuộc gọi thoại miễn phí?
Hãy xem xét dưới góc độ một nhà cung cấp mạng (ví dụ như Vodafone), họ có quyền hạn chế truy cập đối với tất cả hệ thống 2G, 3G và 4G. Cở sở hạ tầng 4G của Vodafone không phải là vô tận vì vậy họ hạn chế khách hàng khai thác bằng cách tính phí. Đối với việc xử lí các nhu cầu như cuộc gọi thoại và tin nhắn, hệ thống sẽ chuyển sang 2G hoặc 3G. Người ta gọi điều này là "chuyển mạch dự phòng" (CSFB).
Lưu ý rằng 4G được thiết kế dành riêng để xử lý tốc độ truyền dữ liệu, do đó nó không thể xử lý các cuộc gọi di động thông thường. Vì vậy, các nhà cung cấp mạng - mà hoàn toàn dựa trên một hệ thống 4G LTE - (ví dụ như Reliance Jio ở Ấn Độ) phải sử dụng một công nghệ hoàn toàn khác để kết nối cuộc gọi trên hệ thống 4G LTE mà người ta thường gọi là VoLTE.
VoLTE là gì?
Các mạng 4G thường hỗ trợ VoLTE (Voice over LTE) – đây là một kỹ thuật giúp thực hiện cuộc gọi thông qua mạng LTE (thay vì sử dụng mạng 2G hay 3G).
Ở mức độ cơ bản nhất, giọng nói của chúng ta được xem như là dữ liệu và VoLTE chính là công nghệ giúp truyền dạng dữ liệu này khi thực hiện cuộc gọi. Nó không chỉ liên tục truyền và nhận các cuộc gọi thoại mà còn cải thiện chất lượng cuộc gọi thoại mà không làm phát sinh thêm bất kỳ khoản phí nào. (Gần giống như việc gọi thoại qua các ứng dụng OTT hiện nay thông qua mạng WiFi)
VoLTE đã được triển khai vài năm nay
VoLTE không phải là một bước đột phá công nghệ mới, các ứng dụng truyền thông phổ biến như Skype, Whatsapp, Viber… cũng đã cung cấp cái gọi là "cuộc gọi miễn phí" dựa trên một hệ thống sử dụng công nghệ VoLTE. Chỉ có điều là các ứng dụng này không hoàn miễn phí, nó sẽ khấu trừ băng thông trong gói cước của bạn.
Nhìn chung, internet đang ảnh hưởng đến toàn bộ ngành công nghiệp truyền thông (dựa vào các công nghệ như 4G LTE và VoLTE). Không nói quá khi có thời điểm nó chi phối mọi hình thức của truyền thông kỹ thuật số.