Xem mẫu

  1. Nhập môn mật mã học    1. Khái niệm mã hóa và giải mã Mật mã và bảo mật trong hệ thống viễn thông là một lĩnh vực 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... Thread này nhằm giải thích các khái niệm thường dùng trong ngành mật mã học (cryptography) với 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. Trước tiên mật mã học (crypto) là một nghệ thuật nhằm giấu thông tin, bằng cách chuyển đổi (encrypt) thông tin thành dạng thông tin không đọc được (cipher text). Chỉ có những người giữ chìa khóa (key) bí mật mới có thể giải mã (decrypt) thông tin thành dạng thông tin có thể hiểu được (plain text). Thông tin đôi khi bị giải mã mà không cần biết khóa bí mật. Ngành học nghiên cứu về việc bẻ khóa (attack/crack/hack) này còn gọi là cryptanalysis. (Xem hình 1) Hình 1: Sơ đồ mã hóa và giải mã 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 dùng trong Internet... hay đơn giản là một thuật toán như DES. Encrypt (encipher, encryption): mã hóa – đó là 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, decryption): giải mã – đó là 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. Plain text/message: là dữ liệu gốc (chưa được mã hóa). Cipher text/message: là dữ liệu đã được mã hóa. Cipher (hay cypher): là 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.
  2. Key: là c khóa – đó chính là thông tin dùn cho qui tr chìa đ ng rình mã hóa và giải mã. 2. Các n nguyên lý cơ bản của quá trình bảo mật và mã hóa : c a h a • Tính bí mật (confi í identiality/p privacy): tín chất này đ bảo thôn tin chỉ đư hiểu bởi nh đảm ng ược những ai biết chìa kh bí mật. hóa • Tính to vẹn (integrity): tính chất này đả bảo thông tin không thể bị thay đ mà không bị oàn h ảm đổi g phát hiện Tính chất này không đ bảo thôn tin không bị thay đổi, nhưng một khi nó bị ng n. n đảm ng g , ghe lén hoặc thay đổi thì người nhận được thông tin có thể bi được là th iết hông tin đã b nghe lén h bị hoặc thay đổi. Các hàm một chiều (on m ne-way funct tion) như MD SHA-1, MAC...được dùng để đả D5, c ảm bảo tính t toàn vẹn cho thông tin. o • Tính xá thực (aut ác thentication người gử (hoặc ngườ nhận) có t chứng m n): ửi ời thể minh đúng họ. Người ta có thể dụng một passwo một cha a g ord, allenge dựa t trên một thuậ toán mã h hoặc một bí ật hóa t mật chia sẻ giữa hai người để xác thực. Sự xá thực này có thể thực h một chi (one-way n c ác hiện iều y) hoặc hai chiều (multu authentic ual cation). • Tính khhông chối bỏ (non-repu b udiation): n người gửi hoặ nhận sau này không t chối bỏ v ặc thể việc đã gửi ho nhận thô tin. Thôn thường đi này được thực hiện th oặc ông ng iều c hông qua mộ chữ ký điệ tử ột ện (electron signature) nic ). • Tính nh dạng (identificatio người dù của một hệ thống, m tài nguyê sở hữu mộ hận on): ùng t một ên ột chứng minh thư (idenntity) như là một chìa kh ban đầu (primary key identity n sẽ xác định à hóa y). này những ch năng của người dùng giới hạn c phép của người dùng cũng như c thuộc tín hức a g, cho a g các nh liên quan (thường gọ chung là cr n ọi redential). Id dentity có th là login, d vân tay, A hể dấu ADN, giản đ đồ võng mạc mắt, âm th c hanh... Trong bả mật có mộ điều quan trọng cần lư ý đó là sự tin tưởng lẫ nhau. Để chia sẻ bí m bí ảo ột ưu ự ẫn một mật cho m người, thì phải tin tư một t ưởng vào kh năng duy trì bí mật củ người đó. Chẳng hạn, hả ủa chúng ta tin tưởng ho toàn vào đối tượng m tạo ra khó riêng (pri oàn o mà óa ivate key). S tin tưởng là Sư một mối quan hệ khô có tính c đặc trưn ông chất ng: - Tính đố xứng: Tôi tin tưởng và ông bác sĩ, nhưng liệu ông bác sĩ có tin tưởng tôi không? ối ào u g - Tính bắ cầu: Tôi tin tưởng vào anh A, anh A tin tưởng vào vợ anh ấy (chị B). Đ đó khô ắt Điều ông có nghĩa là tôi tin tưở vào chị B ởng B. - Tính ph xạ: Tôi có tin tưởng vào chính m hản c mình không? (không phải trong tất cả các lĩnh vự i ả ực ) 3. Khái niệm về chìa khoá Passwor mật khẩu là một hay nhiều từ mà người dùng phải biết đ được cấp q rd: u, y à g để quyền truy c cập. Trong thự tế, mật kh do ngườ dùng tạo ra thường không đủ độ an toàn để đư dùng trực ực hẩu ời a n ược c tiếp trong thuật toán. Vì vậy, tron bất cứ hệ thống mã hó dữ liệu ng g ng óa ghiêm túc nà cũng phải có ào i bước chu uyển đổi mật khẩu ban đầu thành chì khóa có độ an toàn thí hợp. Bướ tạo chìa k t ìa ộ ích ớc khóa này thườ được gọi là key deriv ờng i vation, key st tretching hay key initiali y ization.
  3. 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. 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 dài. 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. Ngoài ra để chống lại tấn công này, chìa khóa bị mật được thay đổi một cách thường xuyên hơn. 4. Thuật toán mã hóa a. Cổ điển(cái này ngày nay vẫn hay dùng trong trò chơi tìm mật thư). • 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. b.Hiện đại b.1. 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ả
  4. năng bị n người thứ ba xem trộm c khóa và có thể giải m được thô điệp Alic mã hóa gử a chìa mã ông ce ửi cho Bob.. Hì 2: Thuật toán mã hóa đối xứng ình t a Bob và A Alice có cùng một khóa g . Khó này được xây dựng sa cho óa ao . Mã hóa đ xứng có thể phân thà hai nhóm phụ: đối ành m - Block c ciphers: thuậ toán khối – trong đó t ật từng khối dữ liệu trong v bản ban đầu được th ữ văn hay thế bằng một khối dữ liệu khác c cùng độ dài. Độ dài m khối gọi là block size thường đư ữ có mỗi e, ược tính bằng đơn vị bit. Ví dụ thuật toán 3-Way có kích thướ khối bằng 96 bit. Mộ số thuật toán g ớc g ột khối thôn dụng là: DES, 3DES, RC5, RC6, 3-Way, CA ng D AST, Camelia Blowfish, MARS, Ser a, rpent, Twofish, GOST... , - Stream ciphers: th toán dòn – trong đó dữ liệu đầu vào được m hóa từng bit một. Các m huật ng ó u mã g thuật toán dòng có tố độ nhanh hơn các thuậ toán khối, được dùng khi khối lượ dữ liệu c n ốc ật , ợng cần mã hóa cchưa được bi trước, ví d trong kết nối không d Có thể c thuật toá dòng là th iết dụ t dây. coi án huật toán khối với kích th i hước mỗi khố là 1 bit. M số thuật t ối Một toán dòng th hông dụng: R RC4, A5/1, A A5/2, Chameleon b.2. Asymmmetric cryyptography mã hóa bấ đối xứng, sử dụng mộ cặp chìa k y: ất , ột khóa có liên quan với nhau về mặt toán học, một ch công kha dùng để m hoá (publi key) và m chìa bí m n hìa ai mã ic một mật dùng để g mã (priv key). M thông điệ sau khi đư mã hóa b chìa côn khai sẽ ch có giải vate Một ệp ược bởi ng hỉ thể được giải mã với chìa bí mật tương ứng. Do các thuậ toán loại n sử dụng m chìa khó ật này một óa công kha (không bí mật) nên còn có tên gọi khác là public-key crypt ai m n tography (th huật toán mã hóa ã dùng chìa khóa công khai). Một số thuật toán bất đối xứn thông dụn là : RSA, Elliptic Cur a g n ng ng , rve, ElGamal Diffie Hell l, lman... Quay lại với Alice và Bob, nếu A à Alice muốn g một thôn điệp bí mậ tới Bob, c ta sẽ tìm c gửi ng ật cô chìa công kha 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 ai S m a à hứ a khác (thô qua chứn chỉ điện t – digital c ông ng tử Alice dùng n để mã hóa thông điệp của certificate), A nó a mình và g tới Bob. Khi Bob nh được bức thông điệp đã mã hóa a ta sẽ dùn chìa bí m gửi hận c p anh ng mật của mình để giải mã nó. Nếu giải mã thành c h i công thì bức thông điệp đ đúng là d đó dành cho Bobb. Alice và Bob trong tr rường hợp n có thể là hai người ch từng que biết. Một hệ thống nh này hưa en hư vậy cho p phép hai ngư thực hiện được giao dịch trong k không ch sẻ trước m thông tin bí ười n khi hia một n mật nào ccả.
  5. Hình 3: Thuật to mã hóa b đối xứng h oán bất g Trong ví dụ trên ta th khóa pub và khóa private phải đáp ứng hấy blic i và từ khóa public người ta không thể tìm ra được kh private. k m hóa Một tron những hạn chế của các thuật toán mã hóa bất đ xứng là t độ chậm do đó trong ng n c đối tốc m, g thực tế ng gười ta thườ sử dụng một hệ thốn lai tạp tron đó dữ liệu được mã h bởi một t ờng ng ng u hóa thuật toán đối x xứng, chỉ có chìa dùng đ thực hiện việc mã hóa này mới đư mã hóa b ó để a ược bằng thuật to oán bất đối xứ Hay nó một cách k ứng. ói khác là ngườ ta dùng thu toán bất đối xứng để chia sẻ chìa ời uật ể a khóa bí m rồi sau đó dùng thuậ toán đối xứ với chìa khóa bí mậ trên để truy thông tin mật đ ật ứng a ật yền n. 5. Một s thuật to nổi tiến số oán ng a. One-ti ime Pad (OTP): OTP xuấ hiện từ đầu thế kỉ 20 v còn có tên gọi khác là Vernam Cip ất u và n pher, OTP được mệnh danh là cái ché thánh của ngành mã h dữ liệu. OTP là thuậ toán duy n chứng m én a hóa ật nhất minh được về lý ề thuyết là không thể phá được nga cả với tài nguyên vô t (tức là có thể chống lại kiểu tấn c p ay tận ó công brute-forrce). Để có th đạt được mức độ bảo mật của OT tất cả nhữ điều kiệ sau phải đ hể TP, ững ện được thỏa mãn n: - Độ dài của chìa khó phải đúng bằng độ dà văn bản cầ mã hóa. óa g ài ần - Chìa kh chỉ được dùng một lầ hóa c ần. - Chìa kh phải là một số ngẫu n hóa m nhiên thực. Mới nghe qua có vẻ đơn giản như trong th tế những điều kiện này khó có th thỏa mãn e đ ưng hực g hể được. Giả sử Alice muốn mã hóa chỉ 10MB d liệu bằng OTP, cô ta phải cần mộ chìa khóa có m a dữ g ột độ dài 10 0MB. Để tạo ra một số n o ngẫu nhiên lớ như vậy A ớn Alice cần mộ bộ tạo số n ột ngẫu nhiên t thực (TRNG - True Rando Number Generator). Các thiết bị này sử dụng nguồn ngẫ nhiên vật lý om ị g ẫu như sự ph rã hạt nh hay bức xạ nền vũ tr Hơn nữa việc lưu trữ chuyển gia và bảo vệ một hân hân rụ. ữ, ao chìa khóa như vậy cũ hết sức k khăn. a ũng khó
  6. 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. b. DES (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). Dưới đây là hình minh họa 16 bước thực hiện mã hóa DES.
  7. Hình 4: 16 bước trong quá trình mã hóa bằng DES c. AES (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. AES ngay nay được sử dụng rộng rải ví dụ trong 802.11i (xem thêm thông tin ở luồng này)
  8. d. 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. 6. 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).
  9. 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. 7. Cách tạo ra khóa public và private trong RSA Phần này sẽ trình bày sơ qua nguyên lý tạo khóa công khai và bí mật trong cách mã hóa RSA dựa trên lý thuyết các số nguyên tố. Trước tiên xin nhắc lại các đặc tính của mã hóa công khai là (public key crypto): - Có 2 loại khóa là khóa công khai (public) và khóa bí mật (private). Khóa công khai thì có thể công khai cho mọi người, còn khóa bí mật thì chỉ có người tạo ra nó được biết. - Thông tin được mã hoá bằng khóa công khai thì chỉ có thể giải mã bằng khoá bí mật. - Thông tin được mã hóa bằng khóa bí mật thì chỉ có thể giải mã bằng khóa công khai. Các bước tạo khóa công khai và bí mật 1. Dùng 2 số nguyên tố khác nhau (số nguyên tố lớn), ta gọi là p và q. đặt N là tích của chúng N=p*q 2. Tìm bội số chung nhỏ nhất L của (p-1) và (q-1) 3. Tìm số nguyên dương bất kỳ e sao cho e và L là 2 số nguyên tố cùng nhau. (ước chung của e và L = 1) 4. Tìm số nguyên dương d sao cho e*d chia cho L có số dư là 1 Tóm lại là e và L, d và L đều là nguyên tố cùng nhau. Như vậy, ta sẽ được: Khóa công khai: e, n Khóa bí mật: d Đặc điểm: từ e, n để tìm ra d thì cực kỳ khó khăn. ta gọi Thông tin chưa mã hóa: M
  10. Thông tin đã mã hóa: C n Mã hóa: Giải mã: mod là pphép chia lấy số dư. y Ta có thể mã hóa các thông tin mang mã nhỏ hơn n (0~n-1) vì khi chia cho n, sẽ nhận được số dư ể c ỏ n h từ 0 -> n-   -1
nguon tai.lieu . vn