Về độ an toàn của giao thức phân phối khoá BB84

Một phần của tài liệu Một số phương pháp mã hóa lượng tử và mô phỏng trên máy tính (Trang 56)

Các hệ mã hoá lƣợng tử, sử dụng các hiện tƣợng lƣợng tử nhƣ nguyên lý bất định Heisenberg, nguyên lý không thể sao chép, nguyên lý rối lƣợng tử để bảo vệ và phân phối khoá mã hoá. Các hệ mã hoá lƣợng tử cho phép hai ngƣời (hoặc hai tổ chức), không chia sẻ thông tin bí mật trƣớc đó, có thể giao tiếp trên các kênh công cộng một cách an toàn. Do dựa trên các nguyên lý nhƣ trên (đặc biệt là nguyên lý không thể sao chép hoàn hảo và nguyên lý bất định Heisenberg) nên các hệ mã lƣợng tử đƣợc coi là an toàn chống lại các phƣơng pháp tấn công của bên thứ ba.

Tuy nhiên một số sơ đồ tấn công các hệ mã lƣợng tử đã đƣợc phát triển nhƣ sơ đồ chặn/chuyển tiếp (intercept/resend scheme) [21], sơ đồ phân tia sáng (beamsplitting scheme) [21] tuy nhiên các sơ đồ tấn công trên vẫn làm nhiễu thông tin Bob thu đƣợc và sẽ bị phát hiện trong giao thức phân phối khoá BB84.

Trong phần này, tôi sẽ trình bày một sơ đồ tấn công có tên là Sao chép gián tiếp (Indirect Coping) [34] mà Eve có thể sử dụng để thu đƣợc thông tin chuyển đi từ Alice mà không bị phát hiện bởi Alice và Bob trong giao thức phân phối khoá lƣợng tử BB84 (cũng nhƣ trong các giao thức tƣơng tự nhƣ B92). Đây là phƣơng pháp tấn công thuộc loại man-in-middle.

Sơ đồ này có thể mô tả nhƣ sau:

- Eve xây dựng một hàm quy tắc. Hàm này là hàm đơn trị với mọi trạng thái lƣợng tử khác nhau đƣợc sử dụng bởi Alice và Bob trong giao thức, nghĩa là mọi giá trị của hàm sẽ tƣơng ứng với các trạng thái lƣợng tử khác nhau.

- Khi Alice gửi các bit lƣợng tử ngẫu nhiên đến cho Bob, Eve sẽ nhận mọi trạng thái này và tính giá trị tƣơng ứng bởi hàm trên sau đó huỷ qubit nhận đƣợc.

- Sau đó Eve sẽ gửi một trạng thái lƣợng tử mới tới Bob dựa trên bảng tham chiếu trong đó mọi giá trị của hàm sẽ tƣơng ứng với một trạng thái lƣợng tử.

Theo sơ đồ này, Eve sẽ có đƣợc chính xác thông tin trao đổi giữa Alice và Bob mà không bị phát hiện. Sơ đồ này có tên là Sao chép gián tiếp (Indirect Coping) do Eve không thực sự sao chép giá trị mà Alice gửi mà tạo một trạng thái lƣợng tử mới có trạng thái giống hệt trạng thái lƣợng tử Alice tạo.

3.1.4.1. Tạo bảng tham chiếu.

Trong giao thức phân phối khoá BB84, để thực hiện việc trao đổi thông tin, Alice và Bob sẽ phải công khai các trạng thái lƣợng tử sử dụng trong giao thức (mà Eve dễ dàng biết). Ở trên ta đã biết đó là các trạng thái thuộc:

- Bảng chữ cái z gồm hai trạng thái 0 , 1

- Bảng chữ cái x gồm hai trạng thái 0 1 ( 0 1 ) 2 x     và 1 1 ( 0 1 ) 2 x     Xét một trạng thái lƣợng tử phụ thích hợp, ví dụ 3 0 1 1 2 2   

Khi đó 1 2 2 3 2 4 3 3 | 0 0.75 2 4 1 1 |1 0.25 2 4 6 2 6 2 | 0.933 4 4 6 2 6 2 | 0.067 4 4 m m m m                                    

trong đó mj (j = 1, 2, 3, 4) theo cơ học lƣợng tử là xác suất để trạng thái lƣợng tử 0 , 1 ,  ,  sụp đổ vào trạng thái  khi tiến hành phép đo (theo cơ sở  ).

Ta xây dựng bảng tham chiếu sau:

Trạng thái lƣợng tử mj

0 0.75

1 0.25

 0.933

 0.067

Dựa vào bảng tham chiếu trên, ta xây dựng hàm đơn trị Sk = f ( jk ), k = 1, 2, 3, 4, jk là một trong bốn trạng thái sử dụng trong BB84.

3.1.4.2. Sơ đồ tấn công.

- Eve nhận tất cả các trạng thái lƣợng tử ngẫu nhiên mà Alice gửi cho Bob và tiến hành đo các trạng thái lƣợng tử nhận đƣợc.

- Theo kết quả đo đƣợc, Eve sẽ biết đƣợc trạng thái lƣợng tử mà Alice gửi đi là gì dựa trên bảng tham chiếu. Ví dụ, nếu kết quả đo đƣợc là 0.25, Eve sẽ biết đƣợc trạng thái lƣợng tử Alice gửi đi là 1 .

- Eve sẽ huỷ trạng thái lƣợng tử nhận đƣợc từ Alice, do theo nguyên lý bất định, sau khi tiến hành phép đo, trạng thái lƣợng tử sẽ bị nhiễu loạn và thay đổi ngẫu nhiên so với trƣớc khi đo.

- Eve tạo trạng thái lƣợng tử mới có giá trị tƣơng ứng và gửi cho Bob

3.1.4.3. Kết luận về độ an toàn của giao thức BB84.

Nhƣ trên ta thấy, giao thức phân phối khoá lƣợng tử BB84 hoàn toàn không an toàn mặc dù theo các nguyên lý của cơ học lƣợng tử thì giao thức BB84 là giao thức an toàn. Tuy nhiên với sự ra đời của giao thức BB84 cũng cho thấy một tiềm năng hết sức lớn lao của các hệ mã lƣợng tử trong tƣơng lai.

3.2. Kết luận về mã hoá lượng tử và thám mã lượng tử.

Hiện nay, mã hoá lƣợng tử và thám mã lƣợng tử đang là một lĩnh vực nghiên cứu hết sức sôi động trên thế giới. Chƣơng này đã đƣa ra một ví dụ đơn giản về mã hoá lƣợng tử và thám mã lƣợng tử. Giao thức phân phối khoá BB84 chỉ là một giao thức đơn giản và hoàn toàn không an toàn. Nhƣng cũng đã cho ta thấy bức tranh về một lĩnh vực hoàn toàn mới mẻ, còn nhiều vấn đề mở cần đầu tƣ nghiên cứu phát triển.

Chương IV. Xây dựng bộ công cụ mô phỏng

Chính vì tiềm năng to lớn của máy tính lƣợng tử, lý thuyết về tính toán lƣợng tử hiện nay đang đựơc phát triển rộng khắp trên thế giới. ở hầu hết các nƣớc phát triển trên thế giới đều xuất hiện các phòng thí nghiệm hay các labo nghiên cứu về tính toán lƣợng tử. Nhiều trung tâm nghiên cứu trên thế giới đều đã xuất hiện những labo nghiên cứu về lĩnh vực này với sự đầu tƣ lên tới hàng tỉ USD nhƣ tại IBM. Năm 2001, IBM đã công bố thí nghiệm thành công việc chế tạo máy tính lƣợng tử 7 – qubit và thực hiện cài đặt thuật toán Peter Shor (http://domino.research.ibm.com/comm/pr.nsf/pages/news.20011219_quantum.html) điều đó chỉ ra rằng, việc chế tạo những chiếc máy tính lƣợng tử công nghiệp chỉ còn là vấn đề thời gian.

Hiện nay trên thế giới, các nhà khoa học đang phát triển rất mạnh hai hƣớng nghiên cứu chính với tiền của đầu tƣ vào rất lớn: thứ nhất là nghiên cứu xây dựng máy tính lƣợng tử dựa vào sự phát triển của khoa học và công nghệ, đặc biệt là về vật lý và hoá học. Hƣớng thứ hai là nghiên cứu các thuật toán lƣợng tử. Với các nƣớc đang phát triển không có nhiều kinh phí, hƣớng nghiên cứu chiến lƣợc sẽ là hƣớng thứ hai về các thuật toán lƣợng tử. Để thực hiện đƣợc điều đó, việc xây dựng một chương trình mô phỏng tính toán lượng tử trên hệ máy tính truyền thống như là một bộ công cụ trợ giúp việc nghiên cứu các thuật toán lượng tử là điều thiết yếu.

4.1. Hướng giải quyết

Trong nghiên cứu mô phỏng tính toán lƣợng tử hiện nay có hai xu hƣớng chính: thứ nhất là viết các chƣơng trình mô phỏng cho từng thuật toán cụ thể, thứ hai là nghiên cứu xây dựng một bộ công cụ cho phép thực thi một mạch bất kỳ.

Rõ ràng hƣớng thứ nhất không thể phát triển đƣợc với qui mô lớn bởi nó không có tính tổng quát. Tuy nhiên đây là hƣớng phát triển đƣợc sử dụng nhƣ một công cụ giảng dậy về tính toán lƣợng tử. Ví dụ nhƣ chƣơng trình mô phỏng GH Quantum Computer thực hiện mô phỏng thuật toán tìm kiếm Grove

(http://www.cit.gu.edu.au/~s55086/qucomp/) viết bằng Java, chƣơng trình Quantum Entanglement viết bằng Perl mô phỏng thuật toán Peter Shor (http://search.cpan.org/dist/Quantum-Entanglement/), chƣơng trình QuBit mô phỏng các trạng thái và hoạt động của bit lƣợng tử đƣợc viết bằng C++ (http://www.bluedust.com/qubit/) .

Trong hƣớng thứ hai, mặc dầu có khả năng phát triển thành một bộ công cụ mạnh nhƣng cần phải giải quyết một số vấn đề đặt ra mà những chƣơng trình hiện nay trên thế giới chƣa giải quyết đƣợc, đó là vấn đề bùng nổ dữ liệu theo luỹ thừa với số qubit đầu vào, một bản chất của mô hình tính toán lƣợng tử, kèm theo đó là vấn đề kiểm soát và xử lý dữ liệu. Có thể ví dụ nhƣ chƣơng trình Quantum Computer Simulator của công ty SENKO [56] viết trên Mathematica, hệ thống mô phỏng mạch lƣợng tử Visual Quantum Studio viết trên nền C# và SQL Server của nhóm Quantum, Khoa Toán Tin Ứng Dụng, ĐH Bách Khoa Hà Nội [5], chƣơng trình QGame (Quantum Gate And Measurement Emulator) viết bằng LISP (http://hampshire.edu/lspector/qgame.html) và QGame++ (Quantum Gate And Measurement Emulator) viết bằng ngôn ngữ C++ http://hampshire.edu/lspector/qgame++/qgame-0.4.1/doc/html/main.html). Cũng có thể kể đến chƣơng trình mô phỏng Quantum Qudit Simulator viết bằng Visual Basic 6 [30]

Nhƣ ta thấy, công cụ sử dụng để phát triển bộ mô phỏng cũng đa dạng: từ VB, C, C++, Java, LISP, Perl đến Matlab, Mathematica, hay sử dụng SQL Server…. Với C/C++, chúng ta sẽ mất nhiều công sức vào vấn đề tổ chức lƣu trữ dữ liệu lớn và xây dựng một bộ công cụ với giao diện thân thiện hỗ trợ ngƣời dùng vì ngôn ngữ không hỗ trợ nhiều module đồ hoạ. Với VB, Java, chúng ta không thể tối ƣu đƣợc về mặt tốc độ đặc biệt là khi phải xử lý với dữ liệu lớn. Với một số chƣơng trình dùng Mathemetica hay Matlab, việc kiểm soát dữ liệu là không chủ động vì nó phụ thuộc vào các nhà thiết kế Mathemetica, Mathlab và chƣa có tƣơng tác trợ giúp thiết kế ở mức giao diện đơn giản. Với SQL Server, ƣu điểm là tốc độ và khả năng tối ƣu cao,

nhƣng khả năng xử lý toán học không cao, gặp khó khăn khi xử lý các bài toán nhƣ tính toán trên số lớn, …

Ngoài ra, nếu sử dụng các công cụ nhƣ Matlab, Mathematica, SQL Server, chúng ta sẽ gặp phải vấn đề bản quyền vì đây là những chƣơng trình thƣơng mại, hơn nữa chi phí cho các chƣơng trình đó đều không rẻ so với điều kiện Việt Nam, nhƣ Mathematical giá khoảng 2300 USD (Windows) đến 4000 USD (Solaris) hay SQL Server từ 6000 USD (Standard Edition) đến 25000 USD (Enterprise Edition) (các giá trên tham khảo tại Website của hãng sản xuất phần).

Để giảm chi phí, hiện nay mã nguồn mở đang là một xu thế tất yếu của các nƣớc đang phát triển. Trung Quốc, Nhật Bản, Hàn Quốc cũng đã đầu tƣ rất nhiều cho mã nguồn mở. Việt Nam cũng không nằm ngoài xu thế đó. Thủ tƣớng Chính phủ đã phê duyệt tại Quyết định số 235/QĐ-TTg ngày 02 tháng 03 năm 2004 và giao Bộ Khoa học và Công nghệ là cơ quan chủ trì, triển khai Dự án tổng thể ―Ứng dụng và phát triển phần mềm nguồn mở ở Việt Nam giai đoạn 2004-2008‖ (http://www.oss.gov.vn/). Trong một số lĩnh vực, phần mềm mã nguồn mở thậm chí còn tốt hơn so với mã nguồn đóng (có thể xem bản so sánh phần mềm nguồn mở và phần mềm nguồn đóng tại địa chỉ http://www.dwheeler.com/oss_fs_why.html hoặc bản dịch tiếng Việt tại http://www.vietkey.net/forum/showthread.php?t=234). Do đó, để giảm thiểu thời gian đồng thời tận dụng những thành phần đã có, tôi đề xuất sử dụng mã nguồn mở. Mã nguồn mở đƣợc lựa chọn ở đây là QCL của Bernhard Ömer [16,17,18,19] do những ƣu điểm sau:

- Chƣơng trình viết bằng C++ tuân thủ chuẩn ANSI C++ do đó dễ tối ƣu và tính khả chuyển cao.

- Tài liệu cung cấp đầy đủ, cấu trúc chƣơng trình trong sáng, dễ hiểu. - Đã xây dựng bộ mô phỏng dƣới dạng ngôn ngữ lập trình có cấu trúc. - Tuân thủ các điều kiện của luật mã nguồn mở GNU 2 hoặc cao hơn.

- Đã đƣợc sự đồng ý của tác giả cho phép sử dụng mã nguồn QCL trong luận văn này (xem phụ lục D)

Tuy nhiên, chƣơng trình QCL đƣợc phát triển trên nền Linux. Trong đó với điều kiện hiện nay ở Việt Nam, Windows dễ sử dụng, thông dụng và phổ biến hơn Linux. Do đó hƣớng giải quyết đƣợc đề xuất là chuyển (porting) bộ mô phỏng QCL sang nền tảng Windows nhƣng vẫn đảm bảo tính khả chuyển để có thể chuyển ngƣợc lại nền Linux. Tôi đề nghị sử dụng môi trƣờng phát triển miễn phí là Bloodshed Dev- C++ (http://www.bloodshed.net/devcpp.html), trình biên dịch C++ miễn phí MinGW (www.mingw.org), các sửa đổi cần tuân thủ các quy tắc của ANSI C++, đảm bảo tính khả chuyển để có thể chạy trên nền Windows và Linux, tính linh hoạt để có thể mở rộng sau này, và đảm bảo tốc độ khi thực hiện tính toán mô phỏng. Đồng thời sau này có thể chuyển qua giao diện Web nhờ sử dụng kỹ thuật lập trình CGI (Common Gateway Interface), ISAPI(Internet Server Application Programming Interface) hoặc ActiveX Server Component (đây là các kỹ thuật lập trình cho phép WebServer gọi đến chƣơng trình (*.EXE, *.DLL) viết bằng C/C++ và trả kết quả về cho Web Browser).

4.2. Thư viện cốt lõi cho mô phỏng tính toán lượng tử 4.2.1. Một số vấn đề phải giải quyết khi lập trình mô phỏng

Một trong những vấn đề quan trọng nhất là quản lý bộ nhớ và tối ƣu hóa tính toán do việc bùng nổ theo lũy thừa thừa với số qubit đầu vào, một bản chất của mô hình tính toán lƣợng tử. Với đầu vào là thanh ghi n qubit chúng ta sẽ phải quản lý 2n

trạng thái và mỗi toán tử Unita tác động lên thanh ghi sẽ biến đổi 2n trạng thái đồng thời (nguyên lý song song lượng tử). Chính vì vậy các cấu trúc khai báo trƣớc (nhƣ mảng tĩnh, biến số) không thể đáp ứng đƣợc yêu cầu mà bắt buộc phải sử dụng cách quản lý bộ nhớ động nhƣ mảng động, … đồng thời để tăng tốc độ xử lý cần sử dụng các hàm băm hợp lý.

Để đơn giản trong quá trình lập trình và đảm bảo đƣợc các yêu cầu trên, Bernhard Ömer đã đề xuất sử dụng thƣ viện khuôn mẫu chuẩn STL (Standard Template Library). Bộ thƣ viện STL [12] hiện nay đƣợc hầu hết các trình biên dịch C++ hỗ trợ (g++, gcc, MinGW, Cygwin, Microsoft Visual C++, …) và đƣợc đƣa vào danh sách các thƣ viện chuẩn của C++ theo tiêu chuẩn ANSI/ISO năm 1994. Có thể download phiên bản mới nhất thƣ viện STL tại địa chỉ http://www.sgi.com/tech/stl/download.html.

Một ví dụ về tiện ích khi sử dụng thƣ viện STL, trong quá trình mô phỏng, chúng ta phải tính toán trên số phức, với thƣ viện STL, mọi toán tử nhƣ +-*/ đều đã đƣợc xây dựng, việc sử dụng số phức chỉ đơn giản khai báo:

#include <complex>

typedef class complex<double> complx;

4.2.2. Xây dựng các lớp cơ bản

4.2.2.1. Quy ước của chương trình

Trong chƣơng trình, tôi tuân thủ theo Bernhard Ömer dùng các quy ƣớc sau để đặt tên cho các lớp:

- Bắt đầu bằng qu: các lớp làm việc với trạng thái của hệ lƣợng tử (quantum states), tên lớp sẽ viết hoa chữ cái đầu tiên của mỗi từ, ví dụ

quState, quSubState, …

- Bắt đầu bằng op: các lớp toán tử Unita, tên lớp sẽ viết hoa chữ cái đầu tiên của mỗi từ, ví dụ opCNot, opToffoli, …

- Các lớp biểu diễn kiểu dữ liệu của chƣơng trình: tên lớp sẽ viết thƣờng hoàn toàn (ví dụ bitvec, complx, …)

4.2.2.2. Biểu diễn dữ liệu trong mô phỏng lượng tử:

Các siêu trạng thái n-qubit của máy tính lƣợng tử đƣợc biểu diễn bằng vector (đƣợc chuẩn hoá) của không gian Hilbert  2n chiều. Các vector cơ sở của không gian này đƣợc biểu diễn bằng lớp bitvec. Lớp này có các hàm và thủ tục làm việc trên dạng nhị phân và dạng Word của vector cơ sở.

Lớp này chứa khai báo Union

union {

word *pvec; word vec; }

Trong trƣờng hợp số qubit cần thiết lớn hơn độ lớn thanh ghi máy tính (máy tính Intel bây giờ là 32 bit, sắp tới là 64 bit) thì sử dụng mảng động đƣợc trỏ đến bởi con trỏ *pvec, còn ngƣợc lại sẽ sử dụng biến kiểu nguyên vec nhằm tối ƣu tốc độ.

4.2.2.2.2. Biểu diễn siêu trạng thái.

Một trạng thái lƣợng tử  n-qubit đƣợc mô tả bởi 2n số phức theo công thức:

2 1 2 1 * 0 i=0 va` 1 n n i i i i c i c c        

Để tích kiệm bộ nhớ, chúng ta chỉ lƣu trữ các số hạng (term) khác 0, nghĩa là chúng ta chỉ lƣu trữ các số hạng có ci ≠ 0.

Một phần của tài liệu Một số phương pháp mã hóa lượng tử và mô phỏng trên máy tính (Trang 56)

Tải bản đầy đủ (PDF)

(112 trang)