Hiển thị các bài đăng có nhãn Mật mã học. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Mật mã học. Hiển thị tất cả bài đăng

Code C#: Mã hóa cổ điển Vigenere (Vigenere Cipher)

Người đăng: share-nhungdieuhay on Thứ Năm, 20 tháng 2, 2014


(VIGENERE CIPHER)
///HÀM MÃ HÓA
static void VigenereEncrypt(ref StringBuilder s, string key)
{
    for (int i = 0; i < s.Length; i++) s[i] = Char.ToUpper(s[i]);
    key = key.ToUpper();
    int j = 0;
    for (int i = 0; i < s.Length; i++)
    {
        if (Char.IsLetter(s[i]))
        {
            s[i] = (char)(s[i] + key[j] - 'A');
            if (s[i] > 'Z') s[i] = (char)(s[i] - 'Z' + 'A' - 1);
        }
        j = j + 1 == key.Length ? 0 : j + 1;
    }
}
///HÀM GIẢI MÃ
static void VigenereDecrypt(ref StringBuilder s, string key)
{
    for (int i = 0; i < s.Length; i++) s[i] = Char.ToUpper(s[i]);
    key = key.ToUpper();
    int j = 0;
    for (int i = 0; i < s.Length; i++)
    {
        if (Char.IsLetter(s[i]))
        {
            s[i] = s[i] >= key[j] ?
                      (char)(s[i] - key[j] + 'A') :
                      (char)('A' + ('Z' - key[j] + s[i] - 'A') + 1);
        }
        j = j + 1 == key.Length ? 0 : j + 1;
    }
}
///HÀM CHÍNH
public static void MainMethod()
{
    StringBuilder s = new StringBuilder("ArkPhaze");
    const string key = "KeyData";
    VigenereEncrypt(ref s, key);
    Console.WriteLine(s);
    VigenereDecrypt(ref s, key);
    Console.WriteLine(s);
}
Tag: C, C++, C#, mã hóa cổ điển, Vigenere, Vigenere Cipher, an toàn, bảo mật
More about

Code C#: Mã hóa cổ điển Rail-Fence (Rail Fence Cipher)

Người đăng: share-nhungdieuhay


(RAIL FENCE CIPHER)
///MÃ HÓA
public static string Encrypt(int rail, string plainText)
{
    List<string> railFence = new List<string>();
    for (int i = 0; i < rail; i++)
    {
        railFence.Add("");
    }

    int number = 0;
    int increment = 1;
    foreach (char c in plainText)
    {
        if (number + increment == rail)
        {
            increment = -1;
        }
        else if (number + increment == -1)
        {
            increment = 1;
        }
        railFence[number] += c;
        number += increment;
    }

    string buffer = "";
    foreach (string s in railFence)
    {
        buffer += s;
    }
    return buffer;
}
///GIẢI MÃ
public static string Decrypt(int rail, string cipherText)
{
    int cipherLength = cipherText.Length;
    List<List<int>> railFence = new List<List<int>>();
    for (int i = 0; i < rail; i++)
    {
        railFence.Add(new List<int>());
    }

    int number = 0;
    int increment = 1;
    for (int i = 0; i < cipherLength; i++)
    {
        if (number + increment == rail)
        {
            increment = -1;
        }
        else if (number + increment == -1)
        {
            increment = 1;
        }
        railFence[number].Add(i);
        number += increment;
    }

    int counter = 0;
    char[] buffer = new char[cipherLength];
    for (int i = 0; i < rail; i++)
    {
        for (int j = 0; j < railFence[i].Count; j++)
        {
            buffer[railFence[i][j]] = cipherText[counter];
            counter++;
        }
    }

    return new string(buffer);

}
///CHƯƠNG TRÌNH CHÍNH
static void Main(string[] args)
{
    int key = 4;
    string plainText = "I Made Ronaldo";

    string cipherText   = RailFence.Encrypt(key, plainText);
    string decryptText  = RailFence.Decrypt(key, cipherText);

    Console.WriteLine("Plain Text   : " + plainText);
    Console.WriteLine("Cipher Text  : " + cipherText);
    Console.WriteLine("Decrypt Text : " + decryptText);

}
Tag: C, C++, C#, mã hóa cổ điển, Rail-Fence, Rail-Fence Cipher, an toàn, bảo mật
More about

Code C#: Mã hóa cổ điển Affine (Affine Cipher)

Người đăng: share-nhungdieuhay


///Hàm mã hóa Affine (Affine Encryption)
/// e(x) = (ax + b)(mod m). Note: a & m là số nguyên tố cùng nhau.

public static string AffineEncrypt(string plainText, int a, int b){
string cipherText = "";

char[] chars = plainText.ToUpper().ToCharArray();

foreach (char c in chars){
      int x = Convert.ToInt32(c - 65);
      cipherText += Convert.ToChar((( a * x + b ) % 26) + 65);
}

return cipherText;
}

/// Hàm giải mã Affine (Affine Decryption)
/// d(x) = aInverse * (e(x) − b)(mod m).

public static string AffineDecrypt(string cipherText, int a, int b){
string plainText = "";

int aInverse = MultiplicativeInverse(a); 

char[] chars = cipherText.ToUpper().ToCharArray();

foreach (char c in chars){
    int x = Convert.ToInt32(c - 65);
    if (x - b < 0) x = Convert.ToInt32(x) + 26;
    plainText += Convert.ToChar(((aInverse * (x - b)) % 26) + 65);
} 
    return plainText;
}

public static int MultiplicativeInverse(int a){
for (int x = 1; x < 27; x++){
    if ((a * x) % 26 == 1)
    return x;
}
throw new Exception("No multiplicative inverse found!");

}

Tag: C, C++, C#, mã hóa cổ điển, Affine, Affine Cipher, an toàn, bảo mật, Security
More about

Code C#: Mã hóa cổ điển Ceasar (Ceasar Cipher)

Người đăng: share-nhungdieuhay



///Ceasar Cipher/Ceasar Encription
using System;
class Program{
static string Caesar(string value, int shift) {
char[] buffer = value.ToCharArray();
for (int i = 0; i < buffer.Length; i++){
// Letter.
char letter = buffer[i];
// Add shift to all.
letter = (char)(letter + shift);
// Subtract 26 on overflow.
// Add 26 on underflow.

if (letter > 'z') {
letter = (char)(letter - 26);
}
else if (letter < 'a') {
letter = (char)(letter + 26);
}
// Store.
buffer[i] = letter;
}
return new string(buffer);
}

static void Main()
{
string a = "test";
string b = Caesar(a, 18); // Ok
string c = Caesar(b, -18); // Ok

string d = Caesar(a, 1); // Ok
string e = Caesar(d, -1); // Ok

string f = "exxegoexsrgi";
string g = Caesar(f, -4); // Ok

Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
Console.WriteLine(d);
Console.WriteLine(e);
Console.WriteLine(f);
Console.WriteLine(g);
}
}
Tag: C, C++, C#, mã hóa cổ điển, Ceasar, Ceasar Cipher, an toàn, bảo mật
More about

Mật mã học: Mật mã Caesar (Mã hóa Caesar)

Người đăng: share-nhungdieuhay on Thứ Ba, 28 tháng 5, 2013


Trong mật mã học, mật mã Caesar, còn gọi là mật mã dịch chuyển, là một trong những mật mã đơn giản và được biết đến nhiều nhất. Mật mã là một dạng của mật mã thay thế, trong đó mỗi ký tự trong văn bản được thay thế bằng một ký tự cách nó một đoạn trong bảng chữ cái để tạo thành bản mã. Vĩ dụ, nếu độ dịch là 3, A sẽ được thay bằng B, Ă sẽ được thay bằng C và cứ thế đến hết. Phương pháp được đặt tên theo Caesar, vị hoàng đế đã sử dụng nó thường xuyên trong công việc.
Bước mã hóa bằng mã Caesar thường được kết hợp với một mã phức tạp hơn, ví dụ như mật mã Vigenère, và hiện nay vẫn được dùng trong các ứng dụng hiên đại nhưROT13. Cũng như các mật mã thay thế dùng một bảng mã khác, mã Xê da dễ dàng bị phá vỡ và không đáp ứng được yêu cầu an toàn thông tin trong truyền thông.
Phép dịch chuyển có thể được biểu diễn bằng hai bảng chữ cái, ví dụ dưới đây bước dịch chuyển là 3, con số này cũng gọi là khóa mã:
Bảng chữ cái thường:   ABCDEFGHIJKLMNOPQRSTUVWXYZ
Bảng chữ cái mật mã:   DEFGHIJKLMNOPQRSTUVWXYZABC

Với bản chữ cái Tiếng Việt:
Bảng chữ cái thường:   AĂÂBCDĐEÊGHIKLMNOÔƠPQRSTUƯVXY
Bảng chữ cái mật mã:   BCDĐEÊGHIKLMNOÔƠPQRSTUƯVXYAĂÂ

Khi mã hóa hay giải mã, người ta thay thế mỗi chữ cái với chữ cái cùng hàng trong bảng trên.
Mật mã cũng có thể được thực hiện bằng số học mô đun. Đầu tiên ta chuyển đổi các chữ cái sang số, A = 0, Ă = 1, Â = 2, B = 3,... Y = 28. Mã hóa ký tự bằng cách dịch chuyển một đoạn n có thể được mô tả bằng công thức toán học dưới đây:
Và giải mã:
(Có nhiều định nghĩa cho phép toán mô đun. Trong trường hợp trên, kết quả phải nằm trong khoảng từ 0...28. Do đó nếu x+n hoặc x-n không nằm trong đoạn 0...28, ta phải cộng hoặc trừ nó với 29.)
Phép thế vẫn giữ nguyên cho toàn bộ văn bản, vì vậy mà mã hóa Xê da được xếp loại vào mã thay thế một bảng chữ cái, khác với mã thay thế nhiều bảng chữ cái.
Giải mã:
Dịch ngược lại dựa theo bảng mật mã trên.
Ví dụ:
Đầu tiên ta có văn bản Help we are being attacked với khóa mã là 15
Mã hóa
Ta tạo ra bảng chữ cái để mã hóa:
Bảng chữ cái thường:   ABCDEFGHIJKLMNOPQRSTUVWXYZ
Bảng chữ cái mật mã:   PQRSTUVWXYZABCDEFGHIJKLMNO
Ta sẽ thay các chữ H=W, E=T, L=A, ...
Văn bản ban đầu: Help we are being attacked
Văn bản mã hóa:  Wtae Lt Pgt Qtxcv Piiprzts
Giải mã
Cũng theo bảng trên, ta thay các chữ W=H, T=E, L=A, ...
Văn bản mã hóa:  Wtae Lt Pgt Qtxcv Piiprzts
Văn bản ban đầu: Help we are being attacked



More about

Mật mã học: Mật mã hóa KHÓA CÔNG KHAI (Khóa bất đối xứng)

Người đăng: share-nhungdieuhay on Thứ Bảy, 25 tháng 5, 2013


Mật mã hóa khóa công khai là một dạng mật mã hóa cho phép người sử dụng trao đổi các thông tin mật mà không cần phải trao đổi các khóa chung bí mật trước đó. Điều này được thực hiện bằng cách sử dụng một cặp khóa có quan hệ toán học với nhau là khóa công khai và khóa cá nhân (hay khóa bí mật).
Thuật ngữ mật mã hóa khóa bất đối xứng thường được dùng đồng nghĩa với mật mã hóa khóa công khai mặc dù hai khái niệm không hoàn toàn tương đương. Có những thuật toán mật mã khóa bất đối xứng không có tính chất khóa công khai và bí mật như đề cập ở trên mà cả hai khóa (cho mã hóa và giải mã) đều cần phải giữ bí mật.
Trong mật mã hóa khóa công khai, khóa cá nhân phải được giữ bí mật trong khi khóa công khai được phổ biến công khai. Trong 2 khóa, một dùng để mã hóa và khóa còn lại dùng để giải mã. Điều quan trọng đối với hệ thống là không thể tìm ra khóa bí mật nếu chỉ biết khóa công khai.
Hệ thống mật mã hóa khóa công khai có thể sử dụng với các mục đích:
  • Mã hóa: giữ bí mật thông tin và chỉ có người có khóa bí mật mới giải mã được.
  • Tạo chữ ký số: cho phép kiểm tra một văn bản có phải đã được tạo với một khóa bí mật nào đó hay không.
  • Thỏa thuận khóa: cho phép thiết lập khóa dùng để trao đổi thông tin mật giữa 2 bên.

Thông thường, các kỹ thuật mật mã hóa khóa công khai đòi hỏi khối lượng tính toán nhiều hơn các kỹ thuật mã hóa khóa đối xứng nhưng những lợi điểm mà chúng mang lại khiến cho chúng được áp dụng trong nhiều ứng dụng.
Hình 1. Chọn một số ngẫu nhiên lớn để sinh cặp khóa
1. Lịch sử
Trong hầu hết lịch sử mật mã học, khóa dùng trong các quá trình mã hóa và giải mã phải được giữ bí mật và cần được trao đổi bằng một phương pháp an toàn khác (không dùng mật mã) như gặp nhau trực tiếp hay thông qua một người đưa thư tin cậy. Vì vậy quá trình phân phối khóa trong thực tế gặp rất nhiều khó khăn, đặc biệt là khi số lượng người sử dụng rất lớn. Mật mã hóa khóa công khai đã giải quyết được vấn đề này vì nó cho phép người dùng gửi thông tin mật trên đường truyền không an toàn mà không cần thỏa thuận khóa từ trước.
Năm 1874, William Stanley Jevons xuất bản một cuốn sách mô tả mối quan hệ giữa các hàm một chiều với mật mã học đồng thời đi sâu vào bài toán phân tích ra thừa số nguyên tố (sử dụng trong thuật toán RSA). Tháng 7 năm 1996, một nhà nghiên cứu đã bình luận về cuốn sách trên như sau:
Trong cuốn The Principles of Science: A Treatise on Logic and Scientific Method được xuất bản năm 1890, William S. Jevons đã phát hiện nhiều phép toán rất dễ thực hiện theo một chiều nhưng rất khó theo chiều ngược lại. Một ví dụ đã chứng tỏ mã hóa rất dễ dàng trong khi giải mã thì không. Vẫn trong phần nói trên ở chương 7 (Giới thiệu về phép tính ngược) tác giả đề cập đến nguyên lý: ta có thể dễ dàng nhân các số tự nhiên nhưng phân tích kết quả ra thừa số nguyên tố thì không hề đơn giản. Đây chính là nguyên tắc cơ bản của thuật toán mật mã hóa khóa công khai RSA mặc dù tác giả không phải là người phát minh ra mật mã hóa khóa công khai.
Thuật toán mật mã hóa khóa công khai được thiết kế đầu tiên bởi James H. Ellis, Clifford Cocks, và Malcolm Williamson tại GCHQ (Anh) vào đầu thập kỷ 1970. Thuật toán sau này được phát triển và biết đến dưới tên Diffie-Hellman, và là một trường hợp đặc biệt của RSA. Tuy nhiên những thông tin này chỉ được tiết lộ vào năm 1997.
Năm 1976, Whitfield Diffie và Martin Hellman công bố một hệ thống mật mã hóa khóa bất đối xứng trong đó nêu ra phương pháp trao đổi khóa công khai. Công trình này chịu sự ảnh hưởng từ xuất bản trước đó của Ralph Merkle về phân phối khóa công khai. Trao đổi khóa Diffie-Hellman là phương pháp có thể áp dụng trên thực tế đầu tiên để phân phối khóa bí mật thông qua một kênh thông tin không an toàn. Kỹ thuật thỏa thuận khóa của Merkle có tên là hệ thống câu đố Merkle.
Thuật toán đầu tiên cũng được Rivest, Shamir và Adleman tìm ra vào năm 1977 tại MIT. Công trình này được công bố vào năm 1978 và thuật toán được đặt tên là RSA. RSA sử dụng phép toán tính hàm mũ môđun (môđun được tính bằng tích số của 2 số nguyên tố lớn) để mã hóa và giải mã cũng như tạo chữ ký số. An toàn của thuật toán được đảm bảo với điều kiện là không tồn tại kỹ thuật hiệu quả để phân tích một số rất lớn thành thừa số nguyên tố.
Hình 2. Dùng khóa công khai để mã hóa, dùng khóa bí mật để giải mã
Kể từ thập kỷ 1970, đã có rất nhiều thuật toán mã hóa, tạo chữ ký số, thỏa thuận khóa.. được phát triển. Các thuật toán như ElGamal (mật mã) do Netscape phát triển hay DSA do NSA và NIST cũng dựa trên các bài toán lôgarit rời rạc tương tự như RSA. Vào giữa thập kỷ 1980, Neal Koblitz bắt đầu cho một dòng thuật toán mới: mật mã đường cong elliptic và cũng tạo ra nhiều thuật toán tương tự. Mặc dù cơ sở toán học của dòng thuật toán này phức tạp hơn nhưng lại giúp làm giảm khối lượng tính toán đặc biệt khi khóa có độ dài lớn.
2. An toàn
Về khía cạnh an toàn, các thuật toán mật mã hóa khóa bất đối xứng cũng không khác nhiều với các thuật toán mã hóa khóa đối xứng. Có những thuật toán được dùng rộng rãi, có thuật toán chủ yếu trên lý thuyết; có thuật toán vẫn được xem là an toàn, có thuật toán đã bị phá vỡ... Cũng cần lưu ý là những thuật toán được dùng rộng rãi không phải lúc nào cũng đảm bảo an toàn. Một số thuật toán có những chứng minh về độ an toàn với những tiêu chuẩn khác nhau. Nhiều chứng minh gắn việc phá vỡ thuật toán với những bài toán nổi tiếng vẫn được cho là không có lời giải trong thời gian đa thức. Nhìn chung, chưa có thuật toán nào được chứng minh là an toàn tuyệt đối (như hệ thống mật mã sử dụng một lần). Vì vậy, cũng giống như tất cả các thuật toán mật mã nói chung, các thuật toán mã hóa khóa công khai cần phải được sử dụng một cách thận trọng.
3. Các ứng dụng

Ứng dụng rõ ràng nhất của mật mã hóa khóa công khai là bảo mật: một văn bản được mã hóa bằng khóa công khai của một người sử dụng thì chỉ có thể giải mã với khóa bí mật của người đó.
Các thuật toán tạo chữ ký số khóa công khai có thể dùng để nhận thực. Một người sử dụng có thể mã hóa văn bản với khóa bí mật của mình. Nếu một người khác có thể giải mã với khóa công khai của người gửi thì có thể tin rằng văn bản thực sự xuất phát từ người gắn với khóa công khai đó.
Các đặc điểm trên còn có ích cho nhiều ứng dụng khác như: tiền điện tử, thỏa thuận khóa...
Hình 3. Dùng khóa bí mật để ký một thông báo, dùng khóa công khai để xác minh chữ ký
4. Những vấn đề trong thực tế

Sự tương tự với bưu chính 
Để thấy rõ hơn ưu điểm của hệ thống mật mã hóa khóa bất đối xứng ta có thể dùng sự tương tự với hệ thống bưu chính trong ví dụ sau: 2 người (Alice và Bob) trao đổi thông tin mật thông qua hệ thống bưu chính. Alice cần gửi một bức thư có nội dung cần giữ bí mật tới cho Bob và sau đó nhận lại thư trả lời (cũng cần giữ bí mật) từ Bob.
Trong hệ thống mật mã hóa khóa đối xứng, Alice sẽ cho bức thư vào hộp và khóa lại rồi gửi hộp theo đường bưu chính bình thường tới cho Bob. Khi Bob nhận được hộp, anh ta dùng một khóa giống hệt như khóa Alice đã dùng để mở hộp, đọc thông tin và gửi thư trả lời theo cách tương tự. Vấn đề đặt ra là Alice và Bob phải có 2 khóa giống hệt nhau bằng một cách an toàn nào đó từ trước (chẳng hạn như gặp mặt trực tiếp).
Trong hệ thống mật mã hóa khóa bất đối xứng, Bob và Alice có hai khóa khác nhau. Đầu tiên, Alice yêu cầu Bob gửi cho mình khóa (công khai) theo đường bưu chính bình thường và giữ lại khóa bí mật. Khi cần gửi thư, Alice sử dụng khóa nhận được từ Bob để khóa hộp. Khi nhận được hộp đã khóa bằng khóa công khai của mình, Bob có thể mở khóa và đọc thông tin. Để trả lời Alice, Bob cũng thực hiện theo quá trình tương tự với khóa của Alice.
Điều quan trọng nhất ở đây là Bob và Alice không cần phải gửi đi khóa bí mật của mình. Điều này làm giảm nguy cơ một kẻ thứ 3 (chẳng hạn như một nhân viên bưu chính biến chất) làm giả khóa trong quá trình vận chuyển và đọc những thông tin trao đổi giữa 2 người trong tương lai. Thêm vào đó, trong trường hợp Bob do sơ suất làm lộ khóa của mình thì các thông tin do Alice gửi cho người khác vẫn giữ bí mật (vì sử dụng các cặp khóa khác).
Thuật toán: liên kết giữa 2 khóa trong cặp
Không phải tất cả các thuật toán mật mã hóa khóa bất đối xứng đều hoạt động giống nhau nhưng phần lớn đều gồm 2 khóa có quan hệ toán học với nhau: một cho mã hóa và một để giải mã. Để thuật toán đảm bảo an toàn thì không thể tìm được khóa giải mã nếu chỉ biết khóa đã dùng mã hóa. Điều này còn được gọi là mã hóa công khai vì khóa dùng để mã hóa có thể công bố công khai mà không ảnh hưởng đến bí mật của văn bản mã hóa. Trong ví dụ ở trên, khóa công khai có thể là những hướng dẫn đủ để tạo ra khóa với tính chất là một khi đã khóa thì không thể mở được nếu chỉ biết những hướng dẫn đã cho. Các thông tin để mở khóa thì chỉ có người sở hữu mới biết.
Những điểm yếu
Tồn tại khả năng một người nào đó có thể tìm ra được khóa bí mật. Không giống với hệ thống mật mã sử dụng một lần (one-time pad) hoặc tương đương, chưa có thuật toán mã hóa khóa bất đối xứng nào được chứng minh là an toàn trước các tấn công dựa trên bản chất toán học của thuật toán. Khả năng một mối quan hệ nào đó giữa 2 khóa hay điểm yếu của thuật toán dẫn tới cho phép giải mã không cần tới khóa hay chỉ cần khóa mã hóa vẫn chưa được loại trừ. An toàn của các thuật toán này đều dựa trên các ước lượng về khối lượng tính toán để giải các bài toán gắn với chúng. Các ước lượng này lại luôn thay đổi tùy thuộc khả năng của máy tính và các phát hiện toán học mới.
Mặc dù vậy, độ an toàn của các thuật toán mật mã hóa khóa công khai cũng tương đối đảm bảo. Nếu thời gian để phá một mã (bằng phương pháp duyệt toàn bộ) được ước lượng là 1000 năm thì thuật toán này hoàn toàn có thể dùng để mã hóa các thông tin về thẻ tín dụng - Rõ ràng là thời gian phá mã lớn hơn nhiều lần thời gian tồn tại của thẻ (vài năm).
Nhiều điểm yếu của một số thuật toán mật mã hóa khóa bất đối xứng đã được tìm ra trong quá khứ. Thuật toán đóng gói ba lô là một ví dụ. Nó chỉ được xem là không an toàn khi một dạng tấn công không lường trước bị phát hiện. Gần đây, một số dạng tấn công đã đơn giản hóa việc tìm khóa giải mã dựa trên việc đo đạc chính xác thời gian mà một hệ thống phần cứng thực hiện mã hóa. Vì vậy, việc sử dụng mã hóa khóa bất đối xứng không thể đảm bảo an toàn tuyệt đối. Đây là một lĩnh vực đang được tích cực nghiên cứu để tìm ra những dạng tấn công mới.
Một điểm yếu tiềm tàng trong việc sử dụng khóa bất đối xứng là khả năng bị tấn công dạng kẻ tấn công đứng giữa (man in the middle attack): kẻ tấn công lợi dụng việc phân phối khóa công khai để thay đổi khóa công khai. Sau khi đã giả mạo được khóa công khai, kẻ tấn công đứng ở giữa 2 bên để nhận các gói tin, giải mã rồi lại mã hóa với khóa đúng và gửi đến nơi nhận để tránh bị phát hiện. Dạng tấn công kiểu này có thể phòng ngừa bằng các phương pháp trao đổi khóa an toàn nhằm đảm bảo nhận thực người gửi và toàn vẹn thông tin. Một điều cần lưu ý là khi các chính phủ quan tâm đến dạng tấn công này: họ có thể thuyết phục (hay bắt buộc) nhà cung cấp chứng thực số xác nhận một khóa giả mạo và có thể đọc các thông tin mã hóa.
Khối lượng tính toán
Để đạt được độ an toàn tương đương, thuật toán mật mã hóa khóa bất đối xứng đòi hỏi khối lượng tính toán nhiều hơn đáng kể so với thuật toán mật mã hóa khóa đối xứng. Vì thế trong thực tế hai dạng thuật toán này thường được dùng bổ sung cho nhau để đạt hiệu quả cao. Trong mô hình này, một bên tham gia trao đổi thông tin tạo ra một khóa đối xứng dùng cho phiên giao dịch. Khóa này sẽ được trao đổi an toàn thông qua hệ thống mã hóa khóa bất đối xứng. Sau đó 2 bên trao đổi thông tin bí mật bằng hệ thống mã hóa đối xứng trong suốt phiên giao dịch.
Mối quan hệ giữa khóa công khai với thực thể sở hữu khóa
Để có thể đạt được những ưu điểm của hệ thống thì mối quan hệ giữa khóa công khai và thực thể sở hữu khóa phải được đảm bảo chính xác. Vì thế các giao thức thiết lập và kiểm tra mối quan hệ này là đặc biệt quan trọng. Việc gắn một khóa công khai với một định danh người sử dụng thường được thực hiện bởi các giao thức thực hiện hạ tầng khóa công khai (PKI). Các giao thức này cho phép kiểm tra mối quan hệ giữa khóa và người được cho là sở hữu khóa thông qua một bên thứ ba được tin tưởng. Mô hình tổ chức của hệ thống kiểm tra có thể theo phân lớp (các nhà cung cấp chứng thực số - X.509) hoặc theo thống kê (mạng lưới tín nhiệm - PGP, GPG) hoặc theo mô hình tín nhiệm nội bộ (SPKI). Không phụ thuộc vào bản chất của thuật toán hay giao thức, việc đánh giá mối quan hệ giữa khóa và người sở hữu khóa vẫn phải dựa trên những đánh giá chủ quan của bên thứ ba bởi vì khóa là một thực thể toán học còn người sở hữu và mối quan hệ thì không. Hạ tầng khóa công khai chính là các thiết chế để đưa ra những chính sách cho việc đánh giá này.
Các vấn đề liên quan tới thời gian thực
Một khóa công khai nào đó có thể liên quan tới một số lượng lớn và khó xác định người sử dụng. Vì thế sẽ tốn rất nhiều thời gian khi muốn thu hồi hoặc thay thế một khóa vì lý do an ninh. Do vậy, các hệ thống hoạt động trong thời gian thực khi áp dụng mã hóa khóa công khai cần phải hết sức thận trọng. Có ít nhất 4 vấn đề cần quan tâm được đề cập sau đây.
Thẩm quyền thu hồi khóa
Việc thu hồi khóa có tính phá hoại hoặc sai sót sẽ có khả năng gây ra ảnh hưởng nghiêm trọng tới hệ thống. Trường hợp này hoàn toàn có thể xảy ra nếu việc thu hồi khóa có thể được thực hiện bởi chỉ một thực thể. Chúng ta có thể làm giảm nguy cơ này bằng cách thực hiện chính sách thu hồi khóa với sự tham gia của hai thực thể trở lên. Chẳng hạn, một khóa chỉ bị thu hồi khi có sự chấp thuận của cả Alice và Bob. Tuy nhiên, xét về phương diện an ninh thì chính sách này tạo nên yếu điểm cho hệ thống. Kẻ tấn công chỉ cần thực hiện tấn công từ chối dịch vụ (DoS) vào Bob hoặc Alice là có thể làm hệ thống ngừng hoạt động.
Do thực thể có thẩm quyền thu hồi khóa rất quan trọng đối với hệ thống nên các cơ chế thực hiện cần đảm bảo càng nhiều bên tham gia càng tốt để chống lại phá hoại đồng thời lại phải đảm bảo càng ít càng tốt để có thể thực hiện việc thu hồi nhanh chóng.
Phân phối khóa mới
Sau khi một khóa bị thu hồi thì một khóa mới cần được phân phối theo một trình tự định trước.
Giả sử khóa của Carol đã bị thu hồi. Trước khi có khóa mới Carol không thể tham gia trao đổi thông tin mật. Không ai có thể gửi thông tin cho Carol mà không vi phạm an ninh hệ thống và các thông tin từ Carol sẽ bị loại bỏ. Điều này cũng có nghĩa phần của hệ thống do Carol kiểm soát ngừng hoạt động. Trong trường hợp này yêu cầu về an ninh được đặt lên trên yêu cầu về tính sẵn sàng của hệ thống.
Trong hệ thống, người có thẩm quyền tạo khóa mới có thể trùng với người có thẩm quyền thu hồi khóa nhưng không bắt buộc như vậy. Nếu xét về phương diện an ninh thì đây không phải là ý tưởng tốt. Vấn đề nảy sinh là chúng ta cần giảm khoảng thời gian giữa thời điểm thu hồi khóa và thời điểm tạo khóa mới tới mức tối thiểu. Để làm tốt việc này lại đòi hỏi một nơi/một thực thể có đủ 2 thẩm quyền nêu trên. Vấn đề là chúng ta phải cân bằng giữa yêu cầu về an ninh và yêu cầu về tính sẵn sàng của hệ thống.
Thông báo thông tin về thu hồi khóa
Thông báo về một khóa nào đó bị thu hồi cần đến được tất cả những người đang sử dụng nó trong thời gian ngắn nhất có thể.
Đối với hệ thống phân phối người ta có 2 cách đưa các thông tin thu hồi khóa đến người dùng: thông tin được đẩy (push) từ điểm trung tâm tới người dùng hoặc người dùng lấy (pull) thông tin từ trung tâm.
Đẩy thông tin từ trung tâm là cách đơn giản nhất để gửi thông tin tới toàn thể người sử dụng. Tuy nhiên không thể đảm bảo là thông tin thực sự tới được đích và đối với một hệ thống lớn thì khả năng gửi thành công tới tất cả người dùng là thấp. Thêm vào đó, thời gian hoàn thành truyền tin sẽ là khá lớn và trong suốt quá trình này thì hệ thống có thể bị lợi dụng. Vì vậy, phương pháp này không đảm bảo an toàn cũng như không tin cậy.
Phương pháp thứ hai người sử dụng lấy thông tin về khóa từ trung tâm trước mỗi lần sử dụng. Điểm yếu của phương pháp này là người sử dụng sẽ bị chặn nếu không kết nối được với trung tâm. Ở đây chúng ta lại thấy một lần nữa mối liên hệ trái chiều giữa an ninh và tính sẵn sàng: càng nhiều server (tăng độ tin cậy) thì thời gian cửa sổ càng lớn (độ an toàn giảm).
Ngoài ra còn một phương án nữa là cung cấp các chứng thực có thời hạn. Việc xác định thời gian sống của mỗi chứng thực sẽ là sự cân bằng giữa yêu cầu an toàn và tính sẵn sàng của hệ thống và người dùng.
Các biện pháp tiến hành khi lộ khóa
Hầu hết các trường hợp thu hồi khóa xảy ra khi có sự kiện nào đó chứng tỏ khóa bí mật đã bị lộ. Ta gọi thời điểm xảy ra sự kiện đó là T.
Điều này dẫn tới 2 hệ quả: Các văn bản mã hóa với khóa công khai sau thời điểm T không còn được xem là bí mật; và các chữ ký số thực hiện với khóa bí mật sau thời điểm T không còn được xem là thật nếu không có những tìm hiểu kỹ lưỡng các sự kiện để tìm ra nơi thực hiện chữ ký.
Nếu nguyên nhân của việc lộ bí mật là lỗi hệ thống thì cần tiến hành ngay lập tức chiến lược phục hồi. Chiến lược này sẽ xác định người có quyền thu hồi khóa, cách thức truyền thông tin tới người dùng, cách thức xử lý các văn bản mã hóa với khóa bị lộ sau thời điểm T. Quy trình phục hồi có thể rất phức tạp và trong lúc tiến hành thì hệ thống rất dễ bị tấn công từ chối dịch vụ (DoS).
5. Một số ví dụ

Một số thuật toán mã hóa khóa công khai được đánh giá cao:

  • Diffie-Hellman
  • DSS (Tiêu chuẩn chữ ký số)
  • ElGamal
  • Các kỹ thuật Mã hóa đường cong elliptic
  • Các kỹ thuật Thỏa thuật khóa chứng thực bằng mật khẩu
  • Hệ thống mật mã Paillier
  • Thuật toán mã hóa RSA (PKCS)

Một số thuật toán mã hóa khóa công khai KHÔNG được đánh giá cao:

  • Merkle-Hellman (sử dụng bài toán cái balô)

Một số ví dụ về giao thức sử dụng mã hóa khóa công khai:

  • GPG thực hiện giao thức OpenPGP
  • IKE
  • Pretty Good Privacy
  • SSH
  • Secure Socket Layer tiêu chuẩn IETF -- TLS
  • SILC
Nguồn: Wikipedia.org
More about

Mật mã học: Thuật toán khóa đối xứng (Symmetric-Key Algorithms)

Người đăng: share-nhungdieuhay on Thứ Ba, 21 tháng 5, 2013


Trong mật mã học, các thuật toán khóa đối xứng (tiếng Anh: symmetric-key algorithms) là một lớp các thuật toán mật mã hóa trong đó các khóa dùng cho việc mật mã hóa và giải mã có quan hệ rõ ràng với nhau (có thể dễ dàng tìm được một khóa nếu biết khóa kia).
Khóa dùng để mã hóa có liên hệ một cách rõ ràng với khóa dùng để giải mã có nghĩa chúng có thể hoàn toàn giống nhau, hoặc chỉ khác nhau nhờ một biến đổi đơn giản giữa hai khóa. Trên thực tế, các khóa này đại diện cho một bí mật được phân hưởng bởi hai bên hoặc nhiều hơn và được sử dụng để giữ gìn sự bí mật trong kênh truyền thông tin.
Nhiều thuật ngữ khác dành cho việc mã hóa dùng chìa khóa đối xứng bao gồm các phương pháp mã hóa đơn khóa (single-key), phương pháp mã hóa một khóa (one-key) và phương pháp mã hóa khóa cá nhân (private-key). Cách sử dụng thuật ngữ sau cùng đôi khi gây xung đột với thuật ngữ khóa cá nhân (private-key) dùng trong mật mã hóa khóa công khai (public key cryptography).
Các loại thuật toán khóa đối xứng
Thuật toán đối xứng có thể được chia ra làm hai thể loại: mật mã luồng (stream ciphers) và mật mã khối (block ciphers). 

  • Mật mã luồng mã hóa từng bit của thông điệp
  • Mật mã khối gộp một số bit lại và mật mã hóa chúng như một đơn vị. 

Cỡ khối được dùng thường là các khối 64 bit. Thuật toán tiêu chuẩn mã hóa tân tiến (Advanced Encryption Standard), được NIST công nhận tháng 12 năm 2001, sử dụng các khối gồm 128 bit.
Các thuật toán đối xứng thường không được sử dụng độc lập. Trong thiết kế của các hệ thống mật mã hiện đại, cả hai thuật toán bất đối xứng (asymmetric) (dùng chìa khóa công khai) và thuật toán đối xứng được sử dụng phối hợp để tận dụng các ưu điểm của cả hai. Những hệ thống sử dụng cả hai thuật toán bao gồm những cái như SSL (Secure Sockets Layer), PGP (Pretty Good Privacy) và GPG (GNU Privacy Guard) v.v. Các thuật toán chìa khóa bất đối xứng được sử dụng để phân phối chìa khóa mật cho thuật toán đối xứng có tốc độ cao hơn.
Một số ví dụ các thuật toán đối xứng nổi tiếng và khá được tôn trọng bao gồm Twofish, Serpent, AES (còn được gọi là Rijndael), Blowfish, CAST5, RC4, Tam phần DES (Triple DES), và IDEA (International Data Encryption Algorithm - Thuật toán mật mã hóa dữ liệu quốc tế).
Tốc độ
Các thuật toán đối xứng nói chung đòi hỏi công suất tính toán ít hơn các thuật toán khóa bất đối xứng (asymmetric key algorithms). Trên thực tế, một thuật toán khóa bất đối xứng có khối lượng tính toán nhiều hơn gấp hằng trăm, hằng ngàn lần một thuật toán khóa đối xứng (symmetric key algorithm) có chất lượng tương đương.
Hạn chế

Hạn chế của các thuật toán khóa đối xứng bắt nguồn từ yêu cầu về sự phân hưởng chìa khóa bí mật, mỗi bên phải có một bản sao của chìa. Do khả năng các chìa khóa có thể bị phát hiện bởi đối thủ mật mã, chúng thường phải được bảo an trong khi phân phối và trong khi dùng. Hậu quả của yêu cầu về việc lựa chọn, phân phối và lưu trữ các chìa khóa một cách không có lỗi, không bị mất mát là một việc làm khó khăn, khó có thể đạt được một cách đáng tin cậy.
Để đảm bảo giao thông liên lạc an toàn cho tất cả mọi người trong một nhóm gồm n người, tổng số lượng chìa khóa cần phải có là

Hiện nay người ta phổ biến dùng các thuật toán bất đối xứng có tốc độ chậm hơn để phân phối chìa khóa đối xứng khi một phiên giao dịch bắt đầu, sau đó các thuật toán khóa đối xứng tiếp quản phần còn lại. Vấn đề về bảo quản sự phân phối chìa khóa một cách đáng tin cậy cũng tồn tại ở tầng đối xứng, song ở một điểm nào đấy, người ta có thể kiểm soát chúng dễ dàng hơn. Tuy thế, các khóa đối xứng hầu như đều được sinh tạo tại chỗ.
Các thuật toán khóa đối xứng không thể dùng cho mục đích xác thực (authentication) hay mục đích chống thoái thác (non-repudiation) được.
Tính thuận nghịch

Theo định nghĩa, các hàm số dùng trong mật mã học phải có khả năng đảo ngược (reversible), vì chúng ta cần phải có khả năng vừa mật mã hóa các thông điệp song cũng đồng thời giải mã chúng (với điều kiện chúng ta có chìa khóa đúng của nó).
Trong quá khứ, nhiều phương pháp đã được sử dụng để giải quyết việc này. Trước đây, người ta đã từng dùng sách mật mã - trong đó chìa khóa phân hưởng liên quan đến nội dụng của quyển sách, mật mã khóa tự động - trong đó chìa khóa có thể được suy ra từ một phần của văn bản thuần túy (plaintext), mã đục lỗ (grill) (Có giả thuyết rằng phương pháp này đầu tiên được nhà toán học người Ý Gerolamo Cardano sáng chế), v.v....
Trong thời đại hiện nay, khi máy tính trở nên sẵn có, đa số các phương pháp mật mã đối xứng đều dựa trên cơ sở 'vòng' tuần hoàn (các lượt tính toán được nhắc đi nhắc lại). Thường thì một lượt được nhắc đi nhắc lại nhiều lần, theo một sự bố trí khá đơn giản. 
Những bit dùng để mã hóa được phân ra là hai phần, P1 và P2. P1 được giữ nguyên, không thay đổi, P2 được cộng (hay được XOR) với một hàm băm một chiều (one-way hashed function) f (được biến thiên bởi một chìa khóa hay một nhân tố (salt)) của P1. Hai kết quả này sau đó được đổi chỗ cho nhau. Mỗi quá trình này được gọi là 'một lượt' (hay một vòng).
Chẳng hạn với p1, p2, chìa khóa là các vectơ bit; Dấu phẩy (',') là toán tử phép ghép chuỗi và f là hàm sốhầu cho:  (key = chìa khóa)
Vì kết quả của lượt tính này vẫn còn cho phép truy cập giá trị của P1, và tính cộng là một phép toán có thể đảo ngược được, cho nên phép toán có thể được giải ngược, đối với bất cứ một hàm số f nào đấy.
Tuy đã chạy qua một vòng toán, song kết quả của nó vẫn chưa được an toàn cho lắm, vì p1 vẫn còn giữ nguyên giá trị và chưa bị thay đổi, nhưng nếu chúng ta lặp lại phép toán một hoặc nhiều lần, thường là bởi nhiều hàm số khác và với 'các chìa khóa của vòng toán' ('round keys'), thì kết quả sẽ tăng cường tính đảm bảo của nó rất nhiều (greatly improves the strength).
Để giải mã bội số lượt, mỗi lượt phải được giải theo trật tự ngược lại và vì thế, trong khi giải mã, các chìa khóa cũng phải được áp dụng theo trật tự ngược lại.
Sau nhiều lần (đa số là từ 8 đến 64 lần) thi hành, kết quả trở nên bị xáo trộn đến mức, như trong trường hợp khi các mã được thiết kế khá tốt, không có phương pháp giải mã nào nhanh hơn là phương pháp brute force key search và chỉ có phương pháp này mới có thể giải được.
Tấn công với các mật mã đối xứng

Trong quá khứ, các mã đối xứng thường rất dễ bị ảnh hưởng bởi các loại tấn công gọi là tấn công với văn bản thuần túy biết trước (known-plaintext attacks), tấn công với văn bản thuần túy chọn trước (chosen plaintext attacks), thám mã vi phân (differential cryptanalysis) và thám mã tuyến tính (linear cryptanalysis). Nếu mỗi hàm số sử dụng trong các vòng toán được thiết kế một cách cẩn thận, thì nó sẽ giảm khả năng chìa khóa của mã bị tấn công một cách thành công rất nhiều.
Khi được sử dụng với mật mã đối xứng để truyền tin chìa khóa mật mã, các trình sinh tạo chìa khóa giả ngẫu nhiên (pseudorandom key generators) thường được sử dụng để sinh tạo các chìa khóa dùng trong phiên giao dịch sử dụng mật mã đối xứng. Song trong quá khứ, sự thiếu hụt trong tính ngẫu nhiên của các trình sinh tạo ngẫu số hay trong các vectơ khởi tạo (initialization vectors) của chúng thường gây ra những thảm họa và thường dẫn đến các vụ mật mã bị bẻ gãy. Việc thực hiện và triển khai thận trọng, với khởi tạo (initialization) dựa trên những nguồn entropi có chất lượng cao là một yếu tố cần thiết để thuyên giảm sự mất mát trong an ninh.



More about

Mật mã học: Tổng quan về mật mã học

Người đăng: share-nhungdieuhay on Thứ Hai, 20 tháng 5, 2013


Mật mã học là gì 
Mật mã học là một lĩnh vực liên quan với các kỹ thuật ngôn ngữ và toán học để đảm bảo an toàn thông tin, cụ thể là trong thông tin liên lạc. Về phương diện lịch sử, mật mã học gắn liền với quá trình mã hóa; điều này có nghĩa là nó gắn với các cách thức để chuyển đổi thông tin từ dạng này sang dạng khác nhưng ở đây là từ dạng thông thường có thể nhận thức được thành dạng không thể nhận thức được, làm cho thông tin trở thành dạng không thể đọc được nếu như không có các kiến thức bí mật. Quá trình mã hóa được sử dụng chủ yếu để đảm bảo tính bí mật của các thông tin quan trọng, chẳng hạn trong công tác tình báo, quân sự hay ngoại giao cũng như các bí mật về kinh tế, thương mại. Trong những năm gần đây, lĩnh vực hoạt động của mật mã hóa đã được mở rộng: mật mã hóa hiện đại cung cấp cơ chế cho nhiều hoạt động hơn là chỉ duy nhất việc giữ bí mật và có một loạt các ứng dụng như: chứng thực khóa công khai, chữ ký số, bầu cử điện tử hay tiền điện tử. Ngoài ra, những người không có nhu cầu thiết yếu đặc biệt về tính bí mật cũng sử dụng các công nghệ mật mã hóa, thông thường được thiết kế và tạo lập sẵn trong các cơ sở hạ tầng của công nghệ tính toán và liên lạc viễn thông.
Mật mã học là một lĩnh vực liên ngành, được tạo ra từ một số lĩnh vực khác. Các dạng cổ nhất của mật mã hóa chủ yếu liên quan với các kiểu mẫu trong ngôn ngữ. Gần đây thì tầm quan trọng đã thay đổi và mật mã hóa sử dụng và gắn liền nhiều hơn với toán học, cụ thể là toán học rời rạc, bao gồm các vấn đề liên quan đến lý thuyết số, lý thuyết thông tin, độ phức tạp tính toán, thống kê và tổ hợp. Mật mã hóa cũng được coi là một nhánh của công nghệ, nhưng nó được coi là không bình thường vì nó liên quan đến các sự chống đối ngầm (xem công nghệ mật mã hóa và công nghệ an ninh). Mật mã hóa là công cụ được sử dụng trong an ninh máy tính và mạng.
Lĩnh vực có liên quan với nó là steganography — là lĩnh vực nghiên cứu về việc che giấu sự tồn tại của thông điệp mà không nhất thiết phải che giấu nội dung của thông điệp đó (ví dụ: ảnh điểm, hay mực không màu).
Một số thuật ngữ về mật mã học

Việc nghiên cứu tìm các phương thức để phá vỡ việc sử dụng mật mã được gọi là phân tích mật mã, hay phá mã. Mật mã hóa và phân tích mật mã đôi khi được nhóm lại cùng nhau dưới tên gọi chung mật mã học, nó bao gồm toàn bộ các chủ đề liên quan đến mật mã. Trong thực tế, thuật ngữ mật mã hóa thông thường được sử dụng để nói đến ngành này một cách tổng thể.
Trong một số ngôn ngữ như tiếng Anh nó là cryptography, có nguồn gốc từ tiếng Hy Lạp kryptós tức là "ẩn", và gráphein, "viết ra". Việc sử dụng từ 'cryptography' lần đầu tiên có lẽ diễn ra trong bài diễn thuyết của Sir Thomas Browne năm 1658 có tên gọi The Garden of Cyrus: "the strange Cryptography of Gaffarel in his Starrie Booke of Heaven".
Mật mã hóa là quá trình chuyển đổi các thông tin thông thường (văn bản thường hay văn bản rõ hay văn bản trơn) thành dạng không đọc trực tiếp được, là văn bản mã hóa. Giải mật mã hay giải mã là quá trình ngược lại, phục hồi lại văn bản thường từ văn bản mã. Mật mã là thuật toán để mật mã hóa và giải mật mã. Hoạt động chính xác của mật mã thông thường được kiểm soát bởi các khóa — một đoạn thông tin bí mật nào đó cho phép tùy biến cách thức tạo ra văn bản mã. Các giao thức mật mã chỉ rõ các chi tiết về việc mật mã (và các nền tảng mật mã hóa khác) được sử dụng như thế nào để thu được các nhiệm vụ cụ thể. Một bộ các giao thức, thuật toán, cách thức quản lý khóa và các hành động quy định trước bởi người sử dụng cùng phối hợp chặt chẽ tạo thành hệ thống mật mã.
Trong cách nói thông thường, "mã" bí mật thông thường được sử dụng đồng nghĩa với "mật mã". Trong mật mã học, thuật ngữ này có ý nghĩa kỹ thuật đặc biệt: Các mã là các phương pháp lịch sử tham gia vào việc thay thế các đơn vị văn bản lớn hơn, thông thường là các từ hay câu văn (ví dụ, "qua tao" thay thế cho "tan cong luc rang dong"). Ngược lại, mật mã hóa cổ điển thông thường thay thế hoặc sắp xếp lại các chữ cái riêng biệt (hoặc một nhóm nhỏ các chữ cái) - ví dụ, "tan cong luc rang dong" trở thành "ubo dpoh mvd sboh epoh" bằng cách thay thế.
Sơ đồ khái quát về một hệ thống mật mã.
Như vậy trong một hệ thống mật mã khái quát sẽ có các thành phần sau:
  • Văn bản trơn (plaintext), tức là thông điệp nguyên gốc chưa được mã hóa.
  • Văn bản mã hóa (ciphertext), tức là thông điệp đã được mã hóa.
  • Thuật toán mã hóa (enciphering algorithm) là các giao thức hoặc hướng dẫn có tác dụng chuyển đổi văn bản trơn thành văn bản mã hóa. Đối với các hệ thống mật mã truyền thống, chỉ có người gửi thông điệp biết được thuật toán mã hóa, tuy nhiên đối với các hệ thống dùng mật mã hóa khóa công khai (Public key code - PKC), tất cả mọi người đều có thể biết thuật toán mã hóa mà không ảnh hưởng tiêu cực đến an ninh của hệ thống.
  • Khóa mã hóa (enciphering key) là một hoặc nhiều đối tượng (thường là các con số hay là các hướng dẫn quan trọng nào đó) được dùng trong việc mã hóa văn bản trơn. Ngoại trừ trong hệ thống PKC, để đảm bảo bí mật an toàn thì khóa mã hóa thường chỉ được người gửi biết.
  • Thuật toán giải mã (deciphering algorithm) là các giao thức hoặc hướng dẫn có tác dụng chuyển đổi văn bản mã hóa trở về văn bản trơn. Để đảm bảo bí mật, chỉ có người nhận thông điệp biết được thuật toán giải mã.
  • Khóa giải mã (deciphering key) là một hoặc nhiều đối tượng (thường là các con số hay là các hướng dẫn quan trọng nào đó) được dùng trong việc giải mã văn bản bị mã hóa. Để đảm bảo bí mật, chỉ có người nhận thông điệp biết được khóa giải mã.

Lịch sử của mật mã học

Mật mã học có lịch sử lâu dài và đầy màu sắc. Nói chung, những dạng sớm nhất của cách viết bí mật (ngày nay gọi chung là mật mã hóa cổ điển) chỉ cần có bút và giấy. Hai phạm trù chính của mật mã cổ điển là mật mã hoán vị, trong đó người ta sắp xếp lại trật tự các chữ cái của thông điệp, và mật mã thay thế, trong đó người ta thay thế có hệ thống các chữ cái hay các nhóm chữ cái bằng các chữ cái hay các nhóm chữ cái khác. Văn bản được mật mã hóa bằng mật mã cổ điển có xu hướng lộ ra các thông tin thống kê nhất định về văn bản thường. Bằng cách sử dụng các thông tin này, mật mã cổ điển rất dễ bị dò ra (ví dụ bằng phân tích tần suất). Mật mã cổ điển vẫn còn được phổ biến tới ngày nay, chủ yếu thông qua việc giải các ô đố chữ (xem tài liệu viết bằng mật mã).
Các thiết bị và các kỹ thuật khác nhau đã được sử dụng để mật mã hóa. Một trong những thiết bị sớm nhất có lẽ là gậy mật mã (tiếng Hy Lạp: σκυτάλη). Trong nửa đầu thế kỷ 20, một số thiết bị cơ khí đã được phát minh để thực hiện mật mã hóa, bao gồm rotor machines — nổi tiếng nhất là máy Enigma được người Đức sử dụng trong Đại chiến thế giới 2. Mật mã thực hiện bằng các máy móc này đã tăng độ phức tạp lên đáng kể đối với công việc phân tích mã.
Với sự ra đời của máy tính kỹ thuật số và điện tử học thì các mật mã cực kỳ phức tạp đã có thể được thực hiện. Đặc trưng của mật mã máy tính là chúng thực hiện trên các chuỗi nhị phân, không giống như trong các mô hình mật mã hóa cổ điển và cơ học (chỉ sử dụng bảng chữ cái với khoảng 26 ký tự-phụ thuộc vào từng ngôn ngữ). Mật mã máy tính cũng có khả nănmg chịu đựng việc phân tích mật mã tốt hơn; rất ít các mật mã như thế dễ bị tổn thương chỉ bởi kiểu tấn công biết bản mã.
Các nghiên cứu rộng rãi có tính học thuật về mật mã hóa hiện đại là tương đối gần đây — nó chỉ được bắt đầu trong cộng đồng mở kể từ những năm thập niên 1970 với các chi tiết kỹ thuật của DES (viết tắt trong tiếng Anh của Data Encryption Standard tức Tiêu chuẩn Mật mã hóa Dữ liệu) và sự phát minh ra RSA. Kể từ đó, mật mã hóa đã trở thành công cụ được sử dụng rộng rãi trong liên lạc và bảo mật máy tính.
Cũng giống như các bài học thu được từ trong lịch sử của nó, các nhà mật mã hóa cũng rất thận trọng khi nhắc đến tương lai. Định luật Moore thông thường được nhắc đến khi nói về độ lớn khóa, và các hiệu ứng tiềm năng của máy tính lượng tử cũng đã được nói.
Ứng dụng của mật mã học
Mật mã hóa được sử dụng phổ biến để đảm bảo an toàn cho thông tin liên lạc. Các thuộc tính được yêu cầu là:

  • Bí mật: Chỉ có người nhận đã xác thực có thể lấy ra được nội dung của thông tin chứa đựng trong dạng đã mật mã hóa của nó. Nói khác đi, nó không thể cho phép thu lượm được bất kỳ thông tin đáng kể nào về nội dung của thông điệp.
  • Nguyên vẹn: Người nhận cần có khả năng xác định được thông tin có bị thay đổi trong quá trình truyền thông hay không.
  • Xác thực: Người nhận cần có khả năng xác định người gửi và kiểm tra xem người gửi đó có thực sự gửi thông tin đi hay không.
  • Không từ chối: Người gửi không thể từ chối việc mình đã gửi thông tin đi.
  • Chống lặp lại: Không cho phép bên thứ ba copy lại văn bản và gửi nhiều lần đến người nhận mà người gửi không hề hay biết.

Mật mã học có thể cung cấp cơ chế để giúp đỡ thực hiện điều này. Tuy nhiên, một số mục tiêu không phải bao giờ cũng là cần thiết, trong nghĩa cảnh của thực tế hay mong muốn của người sử dụng. Ví dụ, người gửi thông tin có thể mong muốn giữ mình là nặc danh; trong trường hợp này tính không từ chối rõ ràng là không thích hợp.




More about