Có thể sử dụng mã hóa đồng cấu hoàn toàn để thực thi mã không biết?


22

Sau khi đọc câu trả lời này một lúc trước, tôi đã quan tâm đến việc mã hóa hoàn toàn đồng cấu. Sau khi đọc phần giới thiệu của luận án Gentry, tôi bắt đầu tự hỏi liệu sơ đồ mã hóa của anh ta có thể được sử dụng để thực thi mã không biết như được định nghĩa trong đoạn thứ ba hay không.

Trong sơ đồ mã hóa hoàn toàn đồng hình, chúng tôi thường mã hóa một số dữ liệu, gửi nó đến một môi trường thù địch nơi một chức năng nhất định được tính trên dữ liệu, kết quả sau đó được gửi lại (được mã hóa) mà không cần tìm hiểu dữ liệu nhận được hoặc kết quả của hàm là.

Với việc thực thi mã không biết tôi có nghĩa là chúng tôi mã hóa một đoạn mã được thiết kế để giải quyết một số vấn đề và gửi nó đến một môi trường thù địch. Kẻ thù muốn sử dụng để giải quyết , nhưng chúng tôi không muốn anh ta biết hoạt động như thế nào . Nếu anh ta có đầu vào cho , anh ta có thể mã hóa và sau đó sử dụng (một số sơ đồ mã hóa trên) với , sau đó trả về đầu ra ( không được mã hóa) (giải pháp của cho đầu vàoCPCPCtôiPtôiCtôiÔiPtôi). Lược đồ mã hóa đảm bảo rằng kẻ thù không bao giờ tìm ra cách thức đoạn mã hoạt động, tức là đối với anh ta, nó hoạt động giống như một lời sấm truyền.

Việc sử dụng thực tế chính (tôi có thể nghĩ ra) cho một kế hoạch mã hóa như vậy sẽ làm cho việc vi phạm bản quyền trở nên khó khăn hơn hoặc thậm chí là không thể.

Lý do tôi nghĩ rằng điều này có thể khả thi khi sử dụng sơ đồ mã hóa hoàn toàn đồng hình là bởi vì chúng ta có thể thực thi các mạch tùy ý trên dữ liệu được mã hóa, đặc biệt là một máy Turing phổ dụng. Sau đó chúng ta có thể mã hóa mã như thể đó là dữ liệu và sau đó sử dụng mạch cho máy Turing phổ dụng trên dữ liệu được mã hóa này để thực thi mã.

Tôi đặt ra câu hỏi này ở đây vì tôi không biết liệu ý tưởng này có thể sử dụng được hay không: tôi chưa bao giờ hiểu được nhiều hơn so với việc giới thiệu luận án của Gentry và kiến ​​thức về mật mã học của tôi bị hạn chế. Ngoài ra, tôi không biết liệu đã có một thuật ngữ thường được sử dụng để thực thi mã không biết hay chưa: Tôi đã thử tìm kiếm ý tưởng của Google nhưng không biết thuật ngữ thích hợp tôi không tìm thấy gì.

Có nhiều vấn đề tôi có thể nghĩ ra có thể gây ra vấn đề với phương pháp này. Thứ nhất, nếu chúng ta sử dụng mã hóa đồng cấu hoàn toàn mà không sửa đổi, kết quả của tính toán ( ) sẽ được mã hóa. Do đó, sẽ là vô ích cho kẻ thù ai muốn sử dụng mã của bạn để giải quyết . Mặc dù điều này vẫn có thể hữu ích cho, giả sử, điện toán đám mây, đây không phải là điều tôi muốn đạt được.ÔiP

Thứ hai, vì chúng tôi đang sử dụng các mạch chứ không phải các máy Turing tùy ý, chúng tôi không thể sử dụng lượng bộ nhớ tùy ý: chúng tôi giới hạn ở một lượng bộ nhớ định trước. Điều này có nghĩa là nếu chúng ta muốn chạy một chương trình theo cách này, thì dung lượng bộ nhớ sẽ luôn giống nhau, đó là mức sử dụng bộ nhớ cao nhất.

Cuối cùng, các hằng số liên quan gần như chắc chắn sẽ giết chết mọi sử dụng thực tế của một hệ thống như vậy, nhưng tôi nghĩ rằng dù sao thì ý tưởng này cũng thú vị.


bạn có chắc chắn từ thuật ngữ "Thực thi mã lãng quên" không? Tôi đã tìm kiếm về nó trong một thời gian và không có gì!
Deyaa

Hoàn toàn không: Tôi tự tạo ra thuật ngữ vì tôi không biết thuật ngữ thích hợp cho nó. Obfuscation và obfuscators rõ ràng là các thuật ngữ thường xuyên cho khái niệm này.
Alex ten Brink

Câu trả lời:


17

Thật không may, có một kết quả về mặt lý thuyết cấm "thực thi mã không biết":

Boaz Barak, Oded Goldreich, Russell Impagliazzo, Steven Rudich, Amit Sahai, Salil Vadhan và Ke Yang. Về khả năng (Im) của các chương trình Obfuscating , NÂNG CAO TRONG KHAI THÁC - CRYPTO 2001.

Dưới đây là các liên kết:

Bản tóm tắt có nội dung:

Một cách không chính thức, obfuscator là một "trình biên dịch" (hiệu quả, có xác suất) lấy đầu vào là một chương trình (hoặc mạch) P và tạo ra một chương trình mới O ( P )ÔiPÔi(P) mới có chức năng tương tự như nhưng "không thể đọc được" theo nghĩa nào đó . Obfuscators, nếu chúng tồn tại, sẽ có rất nhiều ứng dụng lý thuyết mật mã và phức tạp, từ bảo vệ phần mềm đến mã hóa đồng cấu đến tương tự lý thuyết phức tạp của định lý Rice. Hầu hết các ứng dụng này dựa trên việc giải thích điều kiện "không thể đọc được" trong obfuscation có nghĩa là O ( P )PÔi(P)là một "hộp ảo đen," theo nghĩa là bất cứ điều gì một cách hiệu quả có thể tính toán được , người ta có thể cũng có hiệu quả tính toán cho oracle truy cập vào P .Ôi(P)P

Trong công việc này, chúng tôi bắt đầu một cuộc điều tra lý thuyết về obfuscation. Kết quả chính của chúng tôi là, ngay cả dưới những hình thức rất yếu của trực giác nói trên, việc giấu giếm là không thể. Chúng tôi chứng minh điều này bằng cách xây dựng một họ các hàm vốn không thể thực hiện được theo nghĩa sau: có một vị từ π sao cho (a) đưa ra bất kỳ chương trình nào tính toán hàm f trong F , giá trị π ( f ) có thể được tính toán một cách hiệu quả , nhưng (b) đã cho phép truy cập orory vào một chức năng (được chọn ngẫu nhiên) f trong FFπfFπ(f)fF , không có thuật toán hiệu quả nào có thể tính được π(f) tốt hơn nhiều so với đoán ngẫu nhiên.

TC 0


Vâng, đó là loại đặt giảm chấn vào mọi thứ. Tôi chỉ đọc làm thế nào họ chứng minh kết quả của họ: Tôi đặc biệt bối rối khi tôi đọc rằng obfuscator được cho là có quyền truy cập vào mã nguồn của chương trình đối nghịch! (mặc dù tôi chỉ có thể hiểu nhầm bài báo)
Alex ten Brink

5
Theo hiểu biết của tôi, những kết quả này chỉ áp dụng cho mô hình obfuscation "cũ" (không thành công) bằng cách sử dụng hộp đen ảo, và bây giờ các nhà nghiên cứu trong lĩnh vực này đang tìm cách áp dụng khái niệm obfuscation yếu hơn với hy vọng có thể có một số đảm bảo. Một trong những hướng nghiên cứu là áp dụng Mã hóa hoàn toàn đồng nhất, và vì vậy tôi sẽ nói rằng câu hỏi đã mở. Tôi nhớ đã ngồi trong một cuộc nói chuyện từ Microsoft Research vào mùa hè này về các obfuscators điểm cố định và các hộp đen ảo nơi nhà nghiên cứu thực hiện chính xác điểm này.
Ross Snider

3
Một nhà nghiên cứu trong lĩnh vực (hoặc một trong những cái tên ấn tượng từ danh sách tác giả) có thể nhận xét?
Ross Snider

1
@Ross: Vâng, tôi cũng muốn các nhà nghiên cứu khác trong lĩnh vực bình luận ...
MS Dousti

@ Ross, Sadeq: Thỉnh thoảng một số tác giả ghé thăm trang này, hy vọng họ sẽ chú ý đến thẻ. Có câu hỏi trên các trang câu hỏi nổi bật cũng có thể giúp đỡ.
Kaveh

15

Thật vậy, mặc dù mã hóa đồng cấu hoàn toàn rất hữu ích để thực thi mã giữa nhiều bên không tin cậy (ví dụ, xem bài viết này ), bạn cần một số loại tương tác, khi bên tính toán đầu ra được mã hóa gửi cho bên biết khóa bí mật .

Khái niệm bạn đang tìm kiếm nghe có vẻ đáng ngờ gần với sự xáo trộn phần mềm, mà chúng tôi đã chứng minh một kết quả không thể đề cập ở trên. Tôi cũng đã viết một lần tổng quan không chính thức của bài báo đó, rằng một số người có thể thấy hữu ích.

Với kết quả không thể thực hiện được này, có hai cách (không phân biệt) người ta có thể nới lỏng định nghĩa: bằng cách hạn chế các lớp chương trình / chức năng, người ta bắt buộc phải che giấu, hoặc đưa ra một khái niệm lỏng lẻo về bảo mật.

Cách tiếp cận thứ hai có lẽ là có thể, và chúng tôi nhận xét về một số khái niệm giống như obfuscation yếu trong bài báo của chúng tôi. Tuy nhiên, lưu ý rằng cuộc tấn công của chúng tôi phục hồi hoàn toàn mã nguồn ban đầu của một số chương trình, bất kể nó bị xáo trộn như thế nào. Vì vậy, bằng cách nào đó bạn phải đưa ra một định nghĩa bảo mật tầm thường hóa cho trường hợp của các mẫu phản biện của chúng tôi.

Cách tiếp cận đầu tiên được thực hiện cho mọi chức năng bị hạn chế (ví dụ: hàm điểm), nhưng một lần nữa người ta phải đảm bảo rằng lớp không chứa mẫu phản biện của chúng tôi, điều đó có nghĩa là nó không nên chứa các hàm giả ngẫu nhiên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.