Mã hóa bằng khóa bí mật

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu một số giải pháp an toàn và bảo mật cơ sở dữ liệu ứng dụng cho sở giáo dục và đào tạo tỉnh quảng ninh​ (Trang 27)

2.2.1. Khái niệm

Mã hóa khóa bí mật là thuật toán mà tại đó khóa mã hóa có thể tính toán ra được từ khóa giải mã. Trong rất nhiều trường hợp, khóa mã hóa và khóa giải mã là giống nhau. Thuật toán này yêu cầu người gửi và người nhận phải thỏa thuận một khóa trước khi thông báo được gửi đi, khóa này phải được cất giữ bí mật. Độ an toàn của thuật toán này phục thuộc vào khóa, nếu để lộ ra khóa này nghĩa là bất kì người nào cũng có thể mã hóa và giải mã thông báo trong hệ thống mã hóa.

2.2.2. Ưu khuyết điểm

Ưu điểm của phương pháp mã hoá bằng khoá bí mật là thời gian mã hoá nhanh, sử dụng đơn giản chỉ cần dùng một khóa cho hai quá trình mã hóa và giải mã, tuy nhiên phương pháp này có nhược điểm là hệ thống sẽ không an toàn nếu khóa bị lộ với xác suất cao, do đó trong hệ này khóa phải được gửi đi trên kênh an toàn. Điều

này làm phức tạp cho hệ thống khi cài đặt và không thể cho phép tạo ra chữ ký điện tử.

2.2.3. Cơ chế mã hóa khóa bí mật

2.2.3.1. Cơ chế mã hóa AES

AES là thuật toán mã hóa khối được chính phủ Hoa Hỳ áp dụng làm chuẩn mã hóa từ năm 2001. AES có thể thể dễ dàng thực hiện với tốc độ cao bằng phần mềm hoặc phần cứng và không đỏi hỏi nhiều bộ nhớ. Nó sử dụng một kích thước khối 128- bit và kích thước khóa 128, 192, hoặc 256 bit. Hình 2.2 minh họa tiến trình mã hoá AES.

Để mã hóa khối dữ liệu bằng AES thì đầu tiên, tiến hành thao tác:

Add Round Key (thao tác XOR một khóa con với khối dữ liệu). Tiếp theo thì thực hiện một số vòng lặp chính, số vòng lặp chính trong Rijdael như sau:

 Là 9 vòng nếu cả khối cùng mã hóa và khóa có cùng chiều dài là 128 bit.  Là 11 vòng nếu hoặc khối dữ liệu hay khóa là 192 bit và không có cái nào có kích thước lớn hơn 192 bit.

 Là 13 vòng nếu hoặc khối dữ liệu hay khóa có chiều dài là 256 bit. Vòng lặp chính bao gồm những bước sau:

 SubByte (Substitution Byte): Mỗi byte của khối được thay thế bằng một giá trị khi qua một hộp S-box.

 ShiftRow (Shift Rows): Là quá trình chuyển đổi các dòng.

 MixColumn (Multiply Colunms): Thực hiện quá trình nhân ma trận, mỗi cột được nhân với một ma trận kích thước 4x4.

 AddRoundKey (Xored By Key): Quá trình này chỉ là việc XOR khóa con và cho kết quả của vòng hiện hành.

Vòng cuối cùng chỉ thi hành việc chuyển đổi:  SubByte.

 ShiftRow.  AddRoundKey.

2.2.3.2. Phân phối khóa bí mật

Vấn đề an toàn trong dùng khóa đối xứng là vấn đề rất quan trọng vì khóa yêu cầu giữ bí mật tuyệt đối, nếu khóa bị lộ coi như toàn bộ thông tin bị lộ. An toàn trong dùng khóa đối xứng liên quan mật thiết tới vấn đề phân phối khóa. Sơ đồ khóa đối xứng đòi hỏi cả hai đối tác chia sẻ khóa bí mật chung.

Với hai đối tác A và B cần thực hiện chia sẻ thông tin thì có cách phân phối khóa bí mật như sau:

 A lựa chọn khóa bí mật và truyền cho B.

 Đối tác thứ ba chọn khóa và phân phối cho A và B.

 A và B có thể thống nhất dùng khóa trước để mã khóa mới.

 A và B trao đổi với một đối tác thứ ba C và C chuyển tiếp giữa A và B.

Phân loại khóa: Có hai loại chính là khóa phiên và khóa chính.

- Khóa phiên: Là khóa tạm thời dùng để mã hóa dữ liệu giữa nhóm người dùng cho một phiên logic sau đó bị hủy.

- Khóa chính: Là khóa dùng để mã hóa các khóa phiên chia sẻ giữa người dùng và trung tâm phân phối khóa.

2.3. Mã hóa bằng khóa công khai

2.3.1. Khái niệm

Mã hóa bằng khóa công khai hay còn được gọi là mã hóa khóa bất đối xứng hay mã hóa bằng khóa chung. Hệ thống mã hóa bằng khóa công khai sử dụng hai khóa khác nhau để mã hóa và giải mã: một khóa dành cho người mã hóa thường được công khai và khóa còn lại dùng cho người giải mã và được giữ bí mật. Như vậy thì hệ thống mã hóa sử dụng khóa công khai cần có một quá trình sinh ra hai khóa để mã hóa và giải mã thông điệp và các khóa này được xem như một bộ đôi:

Là khóa được phép công khai mà không phải chịu bất kì một rủi ro nào về an toàn, khóa này được dùng để mã hóa dữ liệu.

 Private-key (khóa bí mật):

Là khóa để giải mã và được giữ bí mật, mỗi một dữ liệu được mã hóa bằng khóa công khai thì chỉ có thể giải mã được bằng một khóa bí mật thích hợp.

 Một số thuật toán mã hóa khóa công khai phổ biến như: RSA, Elgamal, … Quá trình mã hóa và giải mã bằng cách sử dụng khóa công khai được minh họa như hình sau:

Hình 2.3: Mã hóa bằng khóa công khai

2.3.2. Ưu khuyết điểm

Ưu điểm của phương pháp này là: Mặc dù kẻ tấn công biết thuật toán mã hóa và khóa mã hóa cũng không thể xác định được khóa giải mã. Chức năng này đạt được trên nguyên tắc sử dụng các hàm một chiều trong toán học khi tính hàm y= f(x) là đơn giản nhưng ngược lại việc tính giá trị y khi đã biết x là rất khó khăn.

Điểm yếu lớn nhất của phương pháp mã hóa bằng khoá công khai là tốc độ mã hóa và giải mã rất chậm so với mã hóa bí mật, nếu dùng mã hóa công khai để mã hóa dữ liệu truyền - nhận giữa hai bên thì sẽ tốn rất nhiều chi phí.

2.3.3. Cơ chế mã hóa khóa công khai

2.3.3.1. Cơ chế mã hóa RSA

Thuật toán mã hóa RSA do ba nhà toán học là Ron Rivest, Adi Shamir và Len Adlerman tại đại học MIT cùng thực hiện vào năm 1977 và được công bố vào năm

1978. Thuật toán được đặt tên là RSA (Rivest - Shamir - Adlerman) được thiết kế theo hệ mã hóa khóa công khai.

Sự khác biệt cơ bản giữa một hệ mã hóa khóa bí mật với một hệ mã hóa khóa công khai đó là hệ mã hóa khóa công khai sử dụng hai khóa khác nhau để mã hóa và giải mã. Mặc dù hai khóa này thực hiện các thao tác ngược nhau và có liên quan đến nhau, nhưng phải làm thế nào đó để không thể suy ra khóa bí mật từ khóa công khai.

Các bước thực hiện của thuật toán RSA được minh họa trong Hình 2.4.

Hình 2.4: Các bước thực hiện của thuật toán RSA

Vấn đề cốt lõi của thuật toán RSA là hai số nguyên tố p và q, hai số này cần phải được giữ bí mật tuyệt đối. Mặt khác, có thể tính toán được khóa bí mật D nếu phân tích được n thành hai số nguyên tố p và q. Nhưng điều này là không khả thi vì phải đối mặt với bài toán khó.

Sinh khóa:  Chọn p, q là 2 số nguyên tố  Tính n = p.q  Tính Ø (n) = (p-1)(q-1)  Chọn e: USCLN[e, Ø(n)] =1  Tính d: d=e-1 mod Ø(n)  Khóa công khai: KU={e,n}  Khóa bí mật: KR={d,n}

Mã hóa: Bản tin gốc: P, bản mã: C=Pe(mod n)

Giải mã: Bản tin mã: C, bản giải mã: P=Cd(mod n)

Các hệ thống mã hóa khóa công khai khắc phục được nhược điểm phân phối khóa phải được giữ một cách an toàn. Tuy nhiên thì khi công khai các khóa dùng để mã hóa thì lại nảy sinh vấn đề một người nào đó giả danh sử dụng để mã hóa các thông báo gửi đến bên nhận làm cho họ không thể phân biệt được thông báo đó là hợp lệ hay không. Và có nhiều phương pháp giải quyết được vấn đề này, điển hình là chữ ký số.

2.3.3.2. Phân phối khóa công khai

Các hệ mã công khai chúng ta đã biết yêu cầu mỗi người phải có một giá trị công khai. Để phân phối các giá trị đó cho người dùng đảm bảo tính xác thực, ta có thể sử dụng một trong các kỹ thuật sau:

Phân phối điểm - điểm trên kênh truyền tin cậy: Khóa công khai của các bên thu được thông qua việc tra đổi trược tiếp với nhau trên mật kênh tin cậy. Phương pháp này phù hợp với hệ thống không thường xuyên sử dụng hoặc hệ thống đóng và nhỏ.

Truy nhập trực tiếp tới các tệp dùng chung: Sử dụng một cơ sở dữ liệu công khai lưu trữ tên và khóa công khai được xác thực mỗi người dùng hệ thống. Truy cập

từ xa trên những kênh truyền công cộng có thể tránh được những tấn công bị động, còn muốn chống lại những tấn công chủ động ta sử dụng những kênh truyền tin cậy.

Sử dụng phục vụ ủy quyền trực tuyến: Một phục vụ tin cậy cho phép các truy nhập như khi truy nhập tới tệp dùng chung, khi các bên có nhu cầu khóa công khai, nó sẽ được phục vụ gửi cho và chữ ký của phục vụ trên đó. Mỗi người sử dụng đều có thể kiểm thử được chữ ký của phục vụ đó.

Sử dụng phục vụ ủy quyền ngoại tuyến và chứng chỉ: Phục vụ được gọi là CA (ủy quyền chứng chỉ). Mỗi người sử dụng chỉ phải liên lạc với phục vụ một lần để đăng ký khóa công khai của mình và nhận khóa kiểm thử chữ ký của CA. CA sẽ chứng nhận khóa công khai của người sử dụng rồi rằng buộc giá trị này với xâu xác định danh tính của người sử dụng, đó là nội dung chứng chỉ của người sử dụng.

2.4. Xác thực thông tin

Việc xác thực thông tin liên quan đến việc sau khi thông tin được truyền trên mạng bao gồm có:

 Bảo vệ tính toàn vẹn của thông tin, tức là bảo vệ thông tin không bị thay đổi hoặc có thể phát hiện ra nếu thông tin có sự thay đổi trên đường truyền.

 Kiểm chứng danh tính nguồn gốc thông tin, tức là kiểm tra xem thông tin có đúng là người gửi hay bị kẻ khác mạo danh.

 Chống từ chối bản tin gốc, tức là bản thân thông tin có chứa định danh người gửi và không ai có thể làm việc đó.

 Có thể bổ sung thêm việc bảo mật như mã hóa.

Do đó để đáp ứng được những yêu cầu đó thì có ba cách mã hóa được lựa chọn là:

 Thông tin được mã hóa bằng khóa đối xứng hoặc công khai.

 Sử dụng mã xác thực bản tin, dùng khóa với hàm nén thông tin cần gửi để nhận được một đặc trưng đính kèm với thông tin và người gửi đó.

 Sử dụng hàm băm nén thông tin thành dấu vân tay cho thông tin.

Yêu cầu bảo mật thông tin khi truyền thông tin trên mạng bao gồm có [4]: Giữ bí mật thông tin, chỉ cho phép người có quyền biết nắm được thông tin đó, không cho phép theo dõi hoặc cản trở việc truyền tin, tránh việc giả mạo lấy danh nghĩa của người khác để truyền tin, ngăn chặn việc nội dung thông tin bị cắn xén và sửa đổi, tránh việc thay đổi thứ tự bản tin truyền, chống chối cãi.

2.4.1. Bảo vệ tính toàn vẹn của thông tin

Đảm bảo tính toàn vẹn của thông tin, tức là thông tin chỉ được phép xóa hoặc sửa bởi những đối tượng được phép và phải đảm bảo rằng thông tin vẫn còn chính xác khi được lưu trữ hay truyền đi. Về điểm này, nhiều người thường hay nghĩ tính toàn vẹn (integrity) đơn giản chỉ là đảm bảo thông tin không bị thay đổi (modify) là chưa đẩy đủ [8].

Trong an toàn thông tin, toàn vẹn có nghĩa rằng dữ liệu không thể bị chỉnh sửa mà không bị phát hiện. Nó khác với tính toàn vẹn trong tham chiếu của cơ sở dữ liệu, mặc dù nó có thể được xem như là một trường hợp đặc biệt của tính nhất quán như được hiểu trong hô hình cổ điển ACID (tính nguyên tử (Atomicity), tính nhất quán (Consistency), tính tính cách ly (Isolation), tính lâu bền (Durability) - là một tập các thuộc tính đảm bảo rằng cơ sở dữ liệu đáng tin cậy) của xử lý giao dịch. Tính toàn vẹn bị xâm phạm khi một thông điệp bị chỉnh sửa trong giao dịch. Hệ thống thông tin an toàn luôn cung cấp các thông điệp toàn vẹn và bí mật [5].

Ngoài ra, một giải pháp toàn vẹn dữ liệu (data integrity) có thể bao gồm thêm việc xác thực nguồn gốc của thông tin này (thuộc sở hữu của đối tượng nào) để đảm bảo thông tin đến từ một nguồn đáng tin cậy và ta gọi đó là tính xác thực (Authenticity) của thông tin.

Sau đây là một số trường hợp tính toàn vẹn của thông tin bị phá vỡ:  Thay đổi giao diện trang chủ của một website.

 Chỉnh sửa trái phép các file được lưu trữ trên máy tính.

 Do có sự cố trên đường truyền mà tín hiệu bị nhiễu hoặc suy hao dẫn đến thông tin bị sai lệch.

2.4.2. Kiểm chứng danh tính nguồn gốc thông tin

Xác thực nguồn gốc dữ liệu còn được gọi là xác thực thông báo, liên quan nhiều tới nguyên vẹn dữ liệu. Tuy nhiên, đây là hai khái niệm khác nhau, chúng có thể được phân biệt rõ ràng qua một số khía cạnh sau đây [2]:

 Thứ nhất, xác thực nguồn gốc dữ liệu gắn liền với liên lạc. Nó có mục đích kiểm tra xem thông báo có phải đến từ nguồn đã khai báo hay không. Còn nguyên vẹn dữ liệu không cần đến đặc tính liên lạc mà nó có thể được cung cấp ngay trên dữ liệu lưu trữ.

 Thứ hai, xác thực nguồn gốc dữ liệu phải bao gồm sự nhận biết nguồn gốc của thông báo, còn nguyên vẹn dữ liệu với tư cách là một dịch vụ an toàn có thể được cung cấp, không cần nhận biết nguồn gốc thông báo.

 Thứ ba và có ý nghĩa hơn cả là xác thực nguồn gốc dữ liệu bao gồm sự thiết lập “tính tươi” của thông báo trong khi đó nguyên vẹn dữ liệu lại không cần làm như vậy: Một đoạn dữ liệu cũ cũng có thể có tính nguyên vẹn hoàn hảo.

 Trong dịch vụ xác thực nguồn gốc dữ liệu, bên nhận thông báo phải kiểm tra xem thông báo này có đủ mới hay không (tức là khoảng thời gian giữa phát và thu thông báo là đủ nhỏ). Thông báo mà bên nhận cho là mới thường được đề cập đến như là một thông báo “tươi”. Việc đòi hỏi thông báo phải tươi có ý nghĩa phổ biến là, thông báo tươi kéo theo sự đáp ứng tốt giữa những thực thể liên lạc và điều này có thể suy luận đến tình huống ít khả năng hơn là khi những thực thể liên lạc, máy móc, những hệ thống hay bản thân thông báo có thể đã bị phá hoại rồi.

Khoảng thời gian để xác định tính tươi của thông báo được xác định bởi các ứng dụng cụ thể. Một số ứng dụng đòi hỏi khoảng thời gian đó dao động trong khoảng vài giây. Một số ứng dụng cho phép chu kỳ tươi dài hơn. Chẳng hạn, thời gian sống

(lifetime) của séc ngân hàng là khoảng thời gian giữa ngày phát hành séc và ngày chi trả séc. Đa số các ngân hàng cho phép khoảng thời gian ba tháng là thời gian sống hợp lệ của séc.

Cuối cùng, cần chỉ ra rằng một sự xác nhận nặc danh nào đó được tạo bởi một vài sơ đồ mật mã (ví dụ chữ ký mù) cũng giúp phân biệt rõ ràng giữa xác thực nguồn gốc dữ liệu và nguyên vẹn dữ liệu. Người sử dụng được cấp một “giấy” xác nhận nặc danh để chứng minh tư cách thành viên với hệ thống. Tại đây, bằng chứng về sự nguyên vẹn dữ liệu có thể được trình diễn theo cách hợp lý, sống động, tuy nhiên hành động của hệ thống nhằm nhận biết nguồn gốc dữ liệu sẽ bị ngăn chặn.

2.4.3. Chống từ chối bản tin gốc

Khi sử dụng một chứng chỉ số, người gửi phải chịu trách nhiệm hoàn toàn về những thông tin mà chứng chỉ số đi kèm. Trong trường hợp người gửi chối cãi, phủ nhận một thông tin nào đó không phải do mình gửi (chẳng hạn qua mạng) chứng chỉ số mà người nhận có được sẽ là bằng chứng khẳng định người gửi là tác giả của thông tin đó. Trong trường hợp chối bỏ, CA cung cấp chứng chỉ số cho hai bên sẽ

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu một số giải pháp an toàn và bảo mật cơ sở dữ liệu ứng dụng cho sở giáo dục và đào tạo tỉnh quảng ninh​ (Trang 27)