( tiếp theo bài trước ).
2. Ma trận phân ly và ma trận phân cách
Tiến Sĩ Nguyễn Quang A là một trong các trí thức hàng đầu của Việt Nam hiện nay. Tôi không biết gì về các công việc làm ăn của anh Quang A, nhưng tôi biết anh đã một tay cáng đáng tủ sách S.O.S. (dù các bản dịch Popper, Hayek hơi trúc trắc, cố gắng này thực sự là đáng nể phục và rất quan trọng), anh còn là nguyên viện trưởng viện IDS vừa tuyên bố giải thể để phản đối quyết định 97 của chính phủ, là một trong số rất hiếm những tiếng nói phản biện xã hội có nội lực ở Việt Nam hiện nay. Tôi cũng không biết tường tận tiểu sử TS Nguyễn Quang A, nhưng tôi biết anh có một bài báo chuyên ngành chất lượng liên quan đến vấn đề thử nhóm. Để mô tả kết quả trong bài báo này và các kết quả khác, chúng ta cần một khái niệm mới gọi là ma trận -phân cách.
Hãy quay lại với bài toán thử nhóm bất ứng biến. Giả sử ta có mẫu máu, trong đó ta biết trước rằng có nhiều nhất là
mẫu dương tính. Cách thiết lập bài toán như thế này gọi là “thử nhóm tổ hợp” (combinatorial group testing), thích hợp với một số ứng dụng nhất định. Trong một số ứng dụng khác thì chúng ta không biết chặn trên
này, và có thể phải giả sử hoăc học một phân bố xác suất của các mẫu máu dương tính. Đó là thiết lập bài toán “thử nhóm xác suất” (probabilistic group testing), nhánh nghiên cứu còn rất mở và chúng ta không có nhiều kết quả tốt, đúng như anh Xuân Long đã bình luận sắc bén trong bài trước.
Xét bài toán thử nhóm bất ứng biến tổ hợp. Giả sử ta thiết kế tổng cộng phép thử. Xây dựng một ma trận
có
hàng và
cột như sau:
nếu và chỉ nếu mẫu máu
nằm trong nhóm của phép thử thứ
, ngoài ra thì
. Ma trận này phải thỏa tính chất gì thì ta mới có thể chỉ ra nhiều nhất
mẫu dương tính sau khi quan sát kết quả của
phép thử? Bộ kết quả của
phép thử có thể xem là một vector kết quả gồm
thành phần, mỗi thành phần là
hoặc
— trong đó
là phép thử dương tính, và
là phép thử âm tính.
Giả sử là tập các mẫu dương tính. Vector kết quả chính là hội của các cột của
tương ứng với
. Hội của hai vector nhị phân
và
là một vector nhị phân
trong đó
, với mọi
. Có thể mô tả cách khác như sau. Mỗi cột của
là vector đặc trưng của một tập con của tập
, và vì thế có thể đánh đồng mỗi cột của
với tập con tương ứng. Vector kết quả chính là hội của các tập con tương ứng với
.
Định nghĩa 1 Một ma trận nhị phân
với
hàng và
cột được gọi là ma trận
-phân-ly (
-separable) nếu và chỉ nếu các hội của nhiều nhất
cột của
là hoàn toàn khác nhau. Cụ thể hơn, lấy
cột
và
cột khác
của ma trận — trong đó
và
— thì ta có
Như vậy, ta có kết quả cơ bản sau
Định lý 2 Chúng ta có thể tìm ra chính xác (nhiều nhất
) mẫu máu dương tính nếu và chỉ nếu ma trận thử nhóm
là ma trận
-phân-ly.
Quan sát đơn giản trên cũng giúp ta thiết lập một chặn dưới cho tổng số phép thử cần thiết. Có tối đa các vector kết quả, do đó một điều kiện cần để
là ma trận
-phân cách là
Trong ngữ cảnh này thì thường , do đó cái chặn dưới ở trên không quá tệ. Từ đó ta có
Dĩ nhiên đây không phải là chặn dưới tốt nhất chúng ta biết, nhưng nó cho ta một trực quan nhất định về tổng số phép thử cần thiết. Điều thú vị là tổng số phép thử cần thiết cũng không nhiều hơn cái chặn thô thiển này lắm.
Giả sử ta có một ma trận -phân-ly, cho một vector kết quả, làm thế nào để tìm đám mẫu dương tính? Cách thô thiển là làm sẵn một bảng tìm kiếm, ánh xạ các vector kết quả vào các tập con của
. Như vậy vừa tốn thời gian, vừa tốn không gian một cách khủng khiếp. Điều ta cần là các ma trận
-phân-ly “có cấu trúc”, để có thể dùng các tính chất đặc biệt nào đó của cấu trúc nọ cho việc tiết kiệm không/thời gian.
Định nghĩa 3 Một ma trận nhị phân
với
hàng và
cột được gọi là ma trận
-phân-cách (
-disjunct) nếu và chỉ nếu hội của
cột tùy ý của
không chứa bất kỳ cột nào khác. Cụ thể hơn, bất kỳ
cột
nào của
cũng thỏa điều kiện
Một ma trận -phân cách có ba tính chất quan trọng, trong đó tính chất 3 là động cơ ta định nghĩa ma trận phân cách. (Đại khái, định nghĩa vậy là để cho một thuật toán giải mã ngây thơ cũng tìm được các mẫu dương tính; xem thêm phía dưới.)
- Nếu
là
-phân-cách thì nó cũng là
-phân-ly
- Nếu
là
-phân-ly thì nó là
-phân-cách
- Quan trọng hơn, cho một ma trận
-phân-cách bất kỳ, và một vector kết quả
, chúng ta có thể chỉ ra các mẫu dương tính trong thời gian
. Ngoài bản thân ma trận này ra, chúng ta không còn cần thêm cấu trúc dữ liệu ngoài nào khác (như cái bảng tìm kiếm ở trên).
Bài tập Chứng minh tính chất 1 và 2.
Thuộc tính 3 là một trong các lý do mà từ giờ trở đi chúng ta sẽ chỉ quan tâm đến các ma trận phân-cách. Tính chất 1 và 2 cho thấy hai loại ma trận này không khác nhau quá nhiều. Chúng ta cần xác định : số hàng nhỏ nhất có thể có của một ma trận
-phân-ly, vì đó cũng là số phép thử ít nhất có thể đạt tới. Gọi
là số hàng nhỏ nhất của một ma trận
-phân-cách, thì các thuộc tính trên cho thấy
Lý do thứ hai mà chúng ta quan tâm đến các ma trận phân cách là vì chúng hoàn toàn tương đương với các mã chồng (superimposed codes). Câu hỏi tự nhiên là xác định , và xây dựng các ma trận phân cách với số hàng càng gần tối ưu càng tốt.
Khi muốn chứng minh một cấu trúc mang tính tổ hợp nào đó tồn tại, như các ma trận phân cách, thì điều đầu tiên chúng ta nên thử là dùng phương pháp xác suất. Xây dựng một ma trận nhị phân với
hàng và
cột một cách ngẫu nhiên như sau: gán
với xác suất
, và gán
với xác suất
; trong đó
là tham số sẽ xác định sau, thì xác suất mà
không phải ma trận
-phân-cách là
và đẳng thức đạt được khi ta đặt . Do đó, sẽ tồn tại ma trận
-phân-cách với
hàng và
cột nếu vế phải ở trên bé hơn hẳn
. Dễ thấy rằng
sẽ làm vế phải bé hơn hẳn
, do đó
Có thể phản-ngẫu-nhiên-hóa (derandomize) chứng minh trên một cách dễ dàng, dẫn đến một thuật toán chạy trong thời gian bằng cách đặt lại bài toán theo một dạng khác và dùng kết quả hồi 2006 của Alon-Moshkovitz-Safra.
Năm ngoái ở hội nghị ICALP 2008 thì Porat và Rothschild tìm được một cách xây dựng hiệu quả hơn, cũng xây dựng được một ma trận với phép thử trong thời gian
. Phương pháp của Porat-Rothschild cũng là một phương pháp phản-ngẫu-nhiên-hóa, tuy nhiên thuật toán ngẫu nhiên hóa của họ khác với cách thô sơ trên; họ dùng mã đúng như trong cách của Kautz-Singleton, nhưng thay vì dùng một mã MDS đã sẵn thì họ xây dựng mã ngẫu nhiên để đạt đến ngưỡng của chặn Gilbert-Varshamov. Bài của anh Quang A và đồng tác giả Zeisel hồi 1988 cũng xây dựng được ma trận
-phân-cách với
hàng trong thời gian khá nhanh (dù tệ hơn kết quả
gần đây). Bài đó cũng dựa trên ý tưởng dùng mã của Kautz-Singleton, nhưng dùng thẳng mã Reed-Solomon. Ngoài ra, các phép xây dựng dùng mã theo kiểu của Kautz-Singleton thường cho ra các ma trận mà tất cả các cột đều có cùng “cân nặng” (số số
trong cột). Thuộc tính này một số ứng dụng cũng cần.
Như vậy ta đã biết rằng các ma trận -phân-cách với
hàng là tồn tại và có thể xây dựng được một cách tương đối nhanh. Nếu chỉ quan tâm đến việc tối thiểu hóa tổng số hàng (nghĩa là tổng số phép thử) thôi thì như vậy là rất tốt vì D’yachkov và Rykov (và sau đó Ruszinko, và Furedi) chứng minh được rằng
Trên thực tế thì thời gian “giải mã”, nghĩa là thời gian chỉ ra các mẫu dương tính cũng là một tham số quan trọng. Các phép xây dựng trên không cho ta biết cách giải mã như thế nào, ngoại trừ cách giải mã “ngây thơ” trong tính chất số 3 của ma trận -phân-cách.
Thuật toán giải mã ngây thơ:
Cho một vector kết quả
, nếu mẫu máu
nằm trong nhóm thử âm tính
(nghĩa là
còn
) thì
là âm tính. Sau khi loại hết các mẫu âm tính kiểu này thì chúng ta chỉ còn lại các mẫu dương tính mà thôi.
Bài tập: Chứng minh rằng thuật toán trên giải mã đúng.
Tuy đơn giản, thuật toán ngây thơ có thời gian chạy , quá lớn trong một số ứng dụng. Ví dụ, nếu
là một hằng số thì
là hàm mũ của
. Trong một bài tới, chúng ta sẽ chỉ ra một thuật toán khác, xây dựng ma trận kiểu khác, để cho thời gian giải mã chỉ còn poly
thôi.

31 Comments
Bác Hưng có thể phân biệt giúp PB về sự khác nhau giữa phép hội với phép cộng đại số không?
Như những gì đọc từ bài viết trên của bác thì PB giả sử hiểu phép hội ở đây ứng với phép modulo 2 thì phải ? Nhưng nếu vậy thì kết quả quan sát là r = M.x = tổng của d cột bất kỳ. Với cách hiểu là công modulo 2 thì sẽ không rút ra được kết luận như thuật giải ngây thơ. Vì giả sử trong cùng một nhóm thử i có hai mẫu thử j và (j + 1) xuất hiện dương tính thì cộng modulo 2 nó bằng 0 ở kết quả. Ngược lại nếu hiểu phép hội là phép Or logic, cụ thể là 1 + 0/1 = 1 thì PB lại không hiểu tập đại số này làm sao có thể liên kết nó với tập đại số thực bao gồm phép nhân và cộng và các giá trị là bây giờ là thực thay vì chỉ là các giá trị nhị phân ?
Hi PB, phép hội ở đây là Logical OR. Liên kết logical OR với đại số số thực quả là khó.
1.Bác Hưng cho PB hỏi định nghĩa 1 nhé, theo định nghĩa này thì ta rút ra khẳng định sau:
Giả sử nếu ta lấy ra 2d vecto cột bất kỳ thì nó phải thỏa mãn rằng hội của bất kỳ d vecto này sẽ khác với hội của d vecto còn lại trong 2d vecto đó,cụ nếu lấy 2 d cột
thì :
PB hiểu đúng không ?
Nếu đúng thì định nghĩa này tương tự như một ma trận của đại số tuyến tính dùng trong Compressed Sensing. Có một định lý phát biểu rằng, nếu vector tín hiệu cần đo là K-sparse thì số hàng ma trận đo M tối thiểu cần là 2K, khi đó các vecto cột của M cần thỏa mãn là bất kỳ 2K vecto cột trong N cột của M là độc lập tuyến tính. Điều này có thể đơn giản suy ra từ khái niệm ánh xạ, nếu hai vector
thì
.
Nếu với số phép đo này thì một cách khôi phục đơn giản là phải chọn 2K cột rồi tìm lại
. Nếu x là K-sparse thì nó là giá trị cần tìm. Tuy nhiên cách làm này không phù hợp với tín hiệu thực trong điều kiện chịu tác động bởi nhiễu. Trong khi như cách mô tả lý thuyết tổ hợp ở trên của bác Hưng thì lại có một thuận lợi là không gian tín hiệu lại chỉ là 0 với 1 nên khoảng cách giữa hai vecto tối thiểu cách nhau một đơn vi 1.
2. Ngoài ra, trong định nghĩa 1 và 3, hiểu hoàn toàn khác và chứa nhau có phải như:
Chẳng hạn nếu cho 2 vector
,
và
thì
nhưng
không hoàn toàn khác
, chỉ hoàn toàn khác với
.
PB hiểu như vậy có đúng không ?
1. PB hiểu đúng rồi. Nhưng định nghĩa đó mạnh hơn điều PB phát biểu. Nói chính xác phải là: cho
cột
và
cột khác
— trong đó
và
thì ta có
PB đã có quan sát sắc bén về sự tương tự và khác biệt giữa group testing và sparse signal recovery. Tôi sẽ viết thêm về mối liên quan này (chắc là phải đến bài GT 6 mới bắt đầu, vì GT 4 viết về chặn dưới, GT 5 về chặn trên và thuật toán giải mã nhanh). À cái thuận lợi của “tổ hợp” thì cũng có thể là một điều bất lợi vì mình không tận dụng được tính liên tục để làm việc trên một không gian thực nào đó. Như kiểu quy hoạch nguyên thì khó hơn quy hoạch tuyến tính.
2.
và
khác cả
lẫn
. Xin lỗi, có lẽ chữ “hoàn toàn” gây hiểu lầm. “Hoàn toàn khác” chỉ có nghĩa là các vectors đó khác nhau, thế thôi.
Theo GS thì thời gian giải mã tối đa là dN (trường hợp tốt thì chỉ bằng d) có nhanh hơn kết quả poly(t) không?
@Bùi Văn, thuật toán ngây thơ không thể chạy trong thời gian
được. Luôn là
(ít nhất là
với
là “cân nặng” của cột, và khi
là hàm mũ của
thì tệ hơn poly
là chắc chắn.
Hi anh Hưng,
Ma trận d-phân cách và d-cover-free family có gì khác nhau không ạ? RC thấy rất giống nhau.
Ngoài ra, RC có một vấn đề thế này, không biết đã có cụ nào xem xét chưa:
Giả sử ta có ma trận d-phân cách, ta có thể coi mỗi cột như một tập con của [t]. Do hội của d cột bất kỳ không chứa bất kỳ cột nào còn lại, xét
là hội của một tập S gồm d cột thì mỗi cột còn lại trong
sẽ có ít nhất 1 phần tử thuộc
.
Câu hỏi là liệu ta có thể phân hoạch tập
thành
tập con sao cho mỗi cột trong
sẽ chứa ít nhất 1 tập con trong phân hoạch này.
Với
(phân hoạch tầm thường thành các tập con chứa 1 phần tử) thì hiển nhiên được. Vấn đề là làm sao cho
là nhỏ nhất có thể (số tập con trong phân hoạch
là ít nhất có thể). (Hàm “nhỏ” có thể được định nghĩa một cách nào đó theo t,d). Hay nói cách khác, xây dựng ma trận giữ tính chất d-phân cách để có thể có
là nhỏ.
Hi RC,
1.
-phân cách và
-cover-free family là tương đương nhau.
2. Ma trận đơn vị là ma trận phân cách. Trong trường hợp này cái phân hoạch tầm thường là phân hoạch duy nhất thỏa điều kiện RC cần. Do đó, chắc RC phải thay đổi bài toán một chút, không thể xét một ma trận phân cách bất kỳ được.
À, nhưng câu cuối cùng của RC đã phát biểu bài toán như vậy. Câu hỏi hay đó! RC có ứng dụng gì cụ thể không? Cần giải mã nhanh không? Cần xây dựng nhanh không?
Hi anh Hưng,
Khi hỏi quả là RC có nghĩ đến ứng dụng sau đây:
gồm
khóa.
, được xác định tương ứng bởi 1 cột trong ma trận. Như vậy có tổng cộng
người.
người bị phát hiện gian lận, chẳng hạn như tiết lộ thông tin bí mật của nhóm (lập thành tập
) và hệ thống muốn loại bỏ họ. Khi đó sẽ loại bỏ các khóa tương ứng với hội của
người này, tức các khóa trong
.
thì đạt được mục đích những ai trong
không giải mã được và những ai trong
giải được, nhưng khá lâu và do đó không hiểu quả. Giả sử ta phân hoạch
được thành các
tập con sao cho mỗi cột trong
sẽ chứa ít nhất 1 tập con trong phân hoạch này. Khi đó, nếu coi mỗi tâp con là 1 khóa mới thì vẫn thỏa mãn tính chất là mỗi người trong
sẽ giải mã được (mỗi người vẫn chứa ít nhất 1 khóa mới).
thành
tập con sao cho mỗi cột trong
sẽ chứa ít nhất 1 tập con trong phân hoạch này. Khi đó những ai trong
vẫn không giải mã được và những ai trong
vẫn giải được.
- Tập khóa
- Mỗi người có một tập khóa là tập con của
- Giả sử có
- Nếu mă với từng khóa riêng lẻ trong
- Thực ra điều kiện trên có thể được giảm bớt đáng kể, chỉ cần: phân hoạch một tập con bất kỳ nào đó của tập
Ngoài ra tập khóa cần phải được giữ không quá lớn. Chẳng hạn như cách xây dựng
là thỏa mãn. Những trường hợp như ma trận đơn vị, kể cả nếu có dẫn tới cho ta
nhỏ, thì vẫn sẽ bị loại từ vòng gửi xe vì
là quá lớn.
Tất nhiên nếu xây dựng cái phân hoạch được nhanh thì quá tốt. Giải mã nhanh chắc chắn cũng sẽ rất cần thiết, nhưng trong ứng dụng trên ta có thể tạm bỏ qua.
thì RC cũng chưa thấy ngay cách xây dựng nào tốt. Ta có thể xét trường hợp riêng này trước?
Ngay trong trường hợp
Hi RC,
Bài toán rất hay! Có hai tham số: tổng số khóa
, và
. Ta muốn cả hai đều nhỏ so với
(và
). Nhưng hai chú này chắc là trade-off của nhau.
Ví dụ
trước. Với
cố định thì
nhỏ nhất là
thỏa mãn
. Cách thiết kế ma trận là gán mỗi cột là một tập con kích thước
của
. Thế nhưng, khi đó dễ thấy rằng
.
Nhưng
cũng được đấy chứ nhỉ, cho
?
Hi anh Hưng,
và với cách chọn tầm thường thì
. Khi thay
thì cho ta kết quả tương tự?
thì cũng không hơn được.
Hình như cách xây dựng này không hơn cách xây dựng tổng quát (hoặc chênh nhau 1 hằng số nhỏ). Trong cách tổng quát thì
Nhưng có lẽ với trường hợp
Không biết trong trường hợp tổng quát liệu ta có thể đặt được
và
, cho phép
nhưng buộc
. Tức là cho phép buông lỏng
để có
.
Hi RC,
Có chiến lược này có thể … gần được: chia bộ
hàng thành
nhóm, mỗi nhóm
hàng. Như vậy,
. Xét nhóm hàng thứ
. Mỗi cột
chỉ có một số
trong nhóm hàng thứ
mà thôi. Chọn số
này một cách ngẫu nhiên trong nhóm. Có thể nghĩ về
hàng trong nhóm thứ
này như
cái rọ, và ta “ném” các cột (hay bi) một cách ngẫu nhiên vào các rọ. Ta làm vậy với tất cả các nhóm hàng/rọ. Theo cách này thì mỗi cột sẽ có
số
.
Ta có thể chứng minh được, với xác suất rất cao (gần đến 1), và với
thì ma trận xây dựng như trên là một ma trận
-phân cách
Chúng ta cần biết giá trị
là bao nhiêu. Nói cách khác, ta cần tìm một tập
các rọ (ở bất kỳ nhóm hàng nào) mà sao cho hội của các rọ này chứa tất cả các hàng “tốt” và *không* chứa bất kỳ một trong
hàng xấu nào.
(Lưu ý rằng formulation này hơi khác với cái phân hoạch của RC: chúng ta không cần phân hoạch các rọ, miễn là tìm một bộ rọ không chứa “bi” xấu mà lại “cover” tất cả các bi tốt là được.)
Hãy xét nhóm hàng thứ nhất: có nhiều nhất là
rọ không dùng được, tất cả các rọ còn lại đều dùng được để “cover” nhóm bi tốt. Sau khi dùng các rọ này thì ta cần “cover” khoảng chừng (tính trị kỳ vọng)
hàng chưa được “covered” (những hàng bị nhét vào chung rọ với bọn
hàng xấu).
Để “cover” tập
gồm khoảng
hàng này thì ta xét đến nhóm hàng thứ hai. Có lẽ (RC chứng minh thử nhé!) ta sẽ chứng minh được rằng một tỉ lệ nhất định các hàng trong
(một nửa chẳng hạn) có thể được “covered” bằng các rọ trong nhóm rọ thứ
.
Nếu tỉ lệ này không đổi, thì sau khoảng
bước, chúng ta sẽ cover hết tất cả các rọ của
.
Tổng cộng số rọ
cần dùng sẽ vào khoảng 
Hi anh Hưng,
hàng xấu đều không thuộc nhóm thứ nhất thì anh sẽ lấy hợp của cả
rọ trong nhóm thứ nhất? Cái hợp này sẽ cho ta tập
và bao luôn tất cả hàng xấu lẫn hàng tốt?
Có chỗ trong lập luận của anh RC chưa rõ : Nếu cả
Ngoài ra cái Reformulation của anh không áp dụng được vào ứng dụng của RC. Tuy nhiên RC đang suy nghĩ, rất có thể cái Reformulation này sẽ cho một ứng dụng đẹp nào đó. Ta có thể phát biểu lại:
Prob2: Tìm một tập
con của
sao cho mọi hàng xấu đều không phải tập con của
và mọi hàng tốt đều là con của
.
Giờ RC giải thích rõ hơn tại sao ứng dụng của RC cần formulation khác.
Prob 1: Tìm một họ các tập
sao cho mọi
đều không là tập con của hợp các hàng xấu VÀ với mọi hàng tốt đều tồn tại một tập
là con của nó.
Prob 1′(giảm nhẹ): Tìm một họ các tập
sao cho mọi
đều không là tập con của mỗi hàng xấu và với mọi hàng tốt đều tồn tại một tập
là con của nó.
Ví dụ với N= 6, t=5:
1 0 0 1 0 1 0
1 0 1 1 1 0 1
0 1 0 1 0 1 0
1 0 1 1 0 0 1
0 1 0 0 1 1 0
Giả sử cần loại hàng 1 và 3. Hội của chúng cho ta 1 1 0 1 0 0
Trường hợp tầm thường, lấy
thì thỏa mãn nhưng
lớn.
Ta có thể làm tốt hơn bằng cách lấy
. Khi đó
là con của hàng 2,4 và
là con của hàng 5. Và
tốt hơn trường hợp trên.
(tương ứng
) và với
(tương ứng
). Khi đó ta thấy được chỉ người 2,4,5 giải được, còn người 1, 3 không giải được dù hợp lực với nhau.
Nếu coi mỗi cột là một khóa. Ta có thể khóa bản rõ M của ta với
Nếu đạt
thì RC nghĩ cũng là một kết quả không tồi. Để đạt
như RC mong có thể hơn quá tham vọng.
Hi RC,
Tại vì khi ném bi vào rọ, mỗi bi phải thuộc một rọ nào đó (thuộc nhóm thứ i), cho nên mỗi hàng xấu phải thuộc vào một rọ nào đó của nhóm. Nếu lấy toàn bộ q rọ trong nhóm thì cover tất cả các hàng.
Tôi không hiểu tại sao không áp dụng được cho ứng dụng của RC. À, trong reply trước tôi viết sai. Đáng lẽ phải là cột xấu/tốt chứ không phải hàng xấu tốt. Không biết cái này có làm RC hiểu lầm không.
Cột = bi (= người dùng/account)
Hàng = rọ (= khóa)
Bi xấu = compromised accounts/users
Có nhiều nhất là d bi xấu. Chúng ta cần lấy ra một bộ
khóa (i.e. rọ) sao cho các rọ này chứa tất cả các bi tốt và không chứa bi xấu nào. Khi đó, mỗi account tốt sẽ có ít nhất một khóa mà không account xấu nào có. Tôi tưởng đây là (một biến thể tương tự của) bài toán mà RC đang nghĩ tới?
Hi anh Hưng,
Đúng là RC khi đọc “hàng xấu” đã lẫn mỗi người là 1 hàng, do vậy mới có chuyện nhóm đầu không chứa người xấu nào.
Ví dụ trên của RC cũng lẫn cho người là hàng.
RC sẽ xem lại kỹ hơn phương án của anh.
Hi anh Hưng,
RC sẽ xem kỹ hơn nhưng có vẻ đó là một phương án rất thú vị.
Nếu ở bước thứ
ta còn
người chưa được covered. Chỉ tính riêng nhóm thứ
, số người không được cover nhiều nhất là
.
Số người sau bước thứ
không được covered là những người trong
người chưa được covered ở bước
, và sau đó cũng không được covered ở bước
.
Mặt khác, xác suất 1 người không được covered ở bước
là
. Do vậy số người sau bước thứ
không được covered là
.
Từ đó suy ra số bước để cover tất cả là
.
Hi anh Hưng,
RC nghĩ hiện tại chúng ta có:
kẻ ăn gian cần loại bỏ
với
. Yếu hơn đôi chút so với lời giải tối ưu
.
. Tốt hơn đáng kể so với lời giải tầm thường
khi
.
- Cho tối đa
- Muốn loại bỏ cần sử dụng ma trận cỡ
- Số khóa cần sử dụng
Để cải thiện, RC nghĩ chúng ta có thể giảm nhẹ mục đích bài toán như sau:
kẻ ăn gian (hợp thành tập
), và ta cần truyền thông điệp cho toàn bộ
người còn lại.
(gồm
người nào đó) trong số
người còn lại.
- Yêu cầu của bài toán gốc phía trên là có nhiều nhất
- Tuy nhiên, trong thực tế, ta không phải lúc nào cũng cần truyền cho tất cả những người còn lại mà chỉ cần gửi cho một tập con
- Ví dụ về một ứng dụng cho bài toán mới này như sau. Ta thiết lập một danh sách tất cả những người quen để gửi email. Sau một thời gian ta thấy cần loại bỏ một tập
người và không bao giờ muốn họ giải mã mail của ta. Tuy nhiên với 1 cái mail có nội dung cụ thể, ta chỉ cần gửi cho 1 nhóm con trong danh sách còn lại sau khi loại bỏ những người trong
chứ không cần gửi cho tất cả. Chẳng hạn, nếu mail về Tin thì cho nhóm bạn Tin, về Toán cho nhóm bạn Toán.
- Yêu cầu của ta khi gửi là: Những người trong
không thể giải được, những người trong
chắc chắn giải được, những người còn lại ta không quan tâm (1 bạn Toán thích tò mò giải được một cái mail về Tin cũng không sao).
- Với yêu cầu trên, liệu ta có thể giảm được đáng kể số khóa cần dùng không?
Một số nhận xét:
, trở lại bài toán gốc
.
, với mỗi thành viên trong
ta chọn sử dụng 1 khóa của người đó mà không trong
(đảm bảo sự tồn tại, từ tính chất
phân cách). Đây cũng là một lời giải tầm thường và cho số khóa cần dùng là
.
- Khi
- Lời giải của bài toán gốc cũng là một lời giải cho bài toán mới. Do vậy số khóa tối đa là
- Trong bài toán mới, sau khi loại bỏ các khóa trong hội của
Do đó, mục đích là làm sao số khóa sử dụng tốt hơn hẳn
.
@RC, nếu mà chiến lược trên là đúng thì mình chỉ cần khoảng
rọ để “cover”
, phải không nhỉ.
Theo RC thì đúng vậy, và như thế chứng tỏ việc đưa vào
có tiềm năng dẫn đến sự thay đổi tốt 
cũng không phải tốt lắm, dù có ý nghĩa lý thuyết
. Nếu tận dụng thông tin về
, chẳng hạn hội của
thì có lẽ ta sẽ có kết quả tốt hơn, chí ít không cần dùng các hàng không nằm trong hội của
.
Tuy nhiên chiến lược này không cần thông tin về P và độ cải thiện là
Ngoài ra thì độ phức tạp của việc giải mã đối với ma trận trên là bao nhiêu ạ, hình như không nhanh lắm? RC sẽ trình bày vì sao sự giải mã có vai trò cũng quan trọng, nhưng 2 hôm nay bị ốm nên đánh khất để sau.
Hi anh Hưng,
người trong hệ thống, bằng cách sử dụng
khóa.
RC tiếp tục về ứng dụng của ma trận phía trên.
Hiện tại thì chúng ta đã có thể loại bỏ
Bây giờ ta hình dung đến trường hợp sau đây: Có kẻ xấu Pirate mua chuộc được
người (
), và do đó thu thập được tất cả các khóa của
người này. Nó ghi toàn bộ các khóa này vào 1 đầu đọc và che dấu rất kỹ thuật để từ cái đầu đọc này ta không thấy được các khóa ẩn trong đó. Bây giờ khi ta gửi bản mã cho mọi người, chỉ cần 1 người trong số những người Pirate mua chuộc được giả được mã là cái đầu đọc của Pirate cũng giải được mã. Vô hình chung cái đầu đọc của Pirate tượng trưng cho sức mạnh giải mã tổng hợp của
người nó mua chuộc được. Pirate sau đó nhân rộng cái đầu đọc thành hàng trăm nghìn bản và bán đầy rẫy ở chợ trời, ai mua cũng được.
Vấn đề của ta bây giờ là ta sẽ ra chợ trời mua 1 cái đầu đọc. Mục đích hay bài toán của ta sẽ là truy ra chính xác
người đã tiếp tay cho Pirate. Trừng trị nghiêm khắc
người này sẽ là cách hữu hiệu ngăn chặn việc sản xuất đầu đọc giả (không ai tiếp tay cho kẻ xấu nữa).
Và tính chất
-cover free giúp ta giải quyết bài toán trên một cách hiệu quả.
Với cái đầu đọc trong tay, ta có thể làm gì?
người ẩn trong đầu đọc có khóa thứ nhất.
người ẩn trong đầu đọc.
thủ phạm!
- Ta đầu tiên gửi tín hiệu được mã bằng khóa thứ nhất, tức là tương ứng hàng thứ nhất. Nếu đầu đọc giải được mã có nghĩa là hội của
- Làm tương tự lần lượt với tất cả các hàng.
- Cuối cùng kết quả thu được chính là hội của
- Với tính chất giải mã được từ véc tơ hội, ta tìm lại được chính xác
Cách bên trên hoàn toàn trùng khớp với thử nhóm để tìm ra các mẫu máu dương tính.
Tuy nhiên, ta chỉ làm được như trên với một Pirate không thông minh lắm.
hàng. Vậy mà bây giờ ta lại chỉ dùng có 1 hàng, Pirate phát hiện ra sự bất bình thường và đầu đọc không giải mã. Và đó là sự khác biệt với thử nhóm.
Lý do là bởi, ở phía trên, khi mã hóa, ta luôn dùng tới
Câu hỏi trở thành: mỗi lần ta phải sử dụng cùng 1 lúc
hàng chứ không phải 1 hàng (có như vậy Pirate mói không phát hiện ra sự bất thường) và Pirate chỉ cần có 1 trong các khóa tươg ứng các hàng này là giải được. Làm sao để vẫn có thể tìm được véc tơ hội của
véc tơ mà Pirate sở hữu?
(RC có một số ý tưởng, đưa vào các dummy rows nhưng không cơ bản, tối ưu nhất là vẫn giữ nguyên ma trận trên mà vẫn tìm được véc tơ hội)
Hi RC,
Biến thể này tôi không hiểu lắm. Có phải là:
1. Mỗi phép thử là một tập gồm
hàng (
chẳng hạn)
cột bí mật có phần giao với một trong
hàng, và NO nếu không cột nào có số 1 nào trong K hàng.
2. Kết quả là YES/NO. YES nều một trong
Tìm cách thiết kế ma trận với số hàng tối thiểu để có thể chỉ ra c cột bí mật?
Hi anh Hưng,
Chính xác là như vậy.
Ma trận
blocks, mỗi blocks
hàng phía trên cho phép ta gửi thông điêp cho tất cả mọi người, trừ
kẻ gian. Muốn vậy, mỗi thông điêp cần dùng
hàng đồng thời. Do vậy một valid ciphertext phải sử dụng
hàng. Do đó đầu đọc của Pirate cũng chỉ chấp nhận những phép thử cho valid ciphertext, tức phép thử tương ứng với
hàng.
Một cách tổng quát, tìm cách thiết kế ma trận:
người thì cần sử dụng
hàng. Mục tiều là tối thiểu hóa
(tức là tối thiểu hóa ciphertext size). Phía trên ta đã có được ma trận thỏa mãn tính chất này với
. Chú ý là ta không cần tối thiểu hóa số hàng của ma trận, lớn không sao miễn là poly(d,\log N). Ma trận phía trên rất tốt, số hàng là
. (Lý do không cần tối thiểu hóa số hàng sẽ cần giải thích kỹ hơn nhưng một cách đại khái là vì số hàng tương ứng private key size, nhưng bằng cách áp dụng 1 kỹ thuật ghép dựa trên RSA, ta có thể compact cái private key size này về cỡ hằng số ).
hàng (
xác định bởi P1), tìm véc tơ hội của
kẻ gian (ẩn trong đầu đọc giả). Từ véc tơ hội này tìm lại
kẻ gian. Mục tiêu là tối thiểu hóa số phép thử và tối thiểu hóa thời gian giải mã (từ véc tơ hội về
kẻ gian). Tuy nhiên, trước mắt chưa cần hiệu quả mà chỉ cần chứng tỏ có thể đạt được P2 đối với các ma trận có tính chất P1 là đã rất đep.
-P1: khi loại bỏ
- P2: bằng cách sử dụng các phép thử đồng thời
Một tính chất khác nếu có được thì rất tốt, đó là các hàng trông “giống nhau” để ngăn một số chiến thuật thông minh của kẻ tấn công. Nhưng ma trận phía trên anh đưa ra đã đạt tính chất này. Do vậy, RC rất kết ma trận
blocks, mỗi blocks
hàng phía trên . Điều nó còn thiếu là tính chất P2.
Hi RC, bỏ qua tốc độ giải mã, một cách brute-force có thể làm là
1. Tìm một tập
gồm
hàng mà sao cho
cột bí mật không giao, nghĩa là đầu đọc không giải mã được. Ta có thể tìm
hàng này một cách brute-force. Tổng số hàng mà hội của
cột bí mật chiếm giữ là
, do đó có ít nhất
hàng mà đám cột bí mật không chiếm đóng.
2. Sau đó, lấy một hàng
ra khỏi
và thay nó bằng một trong các hàng
còn lại. Cứ như vậy từng hàng một, cho
duyệt qua tất cả các hàng còn lại. Mỗi lần thử thì dùng
. Và, mỗi lần thử có thể dùng một
khác trong
.
Cách này có vẻ không hay vì 2 lý do: một là tìm ra
tốn thời gian quá; hai là các bộ
hàng dùng để thử có phần chung hơi lớn quá.
Nếu cần “diversify” các phép thử hơn nữa cũng có lẽ được; phải nghĩ thêm. Có vẻ như đây là một bài thử nhóm “bên trong” một bài thử nhóm khác. Ta có thể nghĩ như sau. Giả sử
là tổng số hàng của ma trận đã xây dựng. Chúng ta cần tìm
, vector hội của các “cột xấu”. Vector hội này có nhiều nhất là
số 1. Và dimension của nó là
. Chúng ta cần dùng các phép thử kích thước
để chỉ ra vị trí của các số 1 trong vector hội.
Hãy xét một ma trận
-disjunct gồm
hàng và
cột sao cho mỗi hàng có cân nặng chính xác là
. Ta sẽ dùng ma trận này để thiết kế các phép thử. Nếu ma trận này có ít hàng thì số phép thử ít. Nếu nó giải mã nhanh được thì ta cũng giải mã nhanh được. Trong bài toán của RC có vẻ như một adaptive strategy là đủ, không cần non-adaptive.
Hi anh Hưng,
hàng toàn 0 (không ai có khóa), nhét ngẫu nhiên xen kẽ với các hàng thât. Sau đó trong phép thử thì dùng
dummy rows và 1 hàng thật.
cột nó sở hữu thì cả 2 loại đều chứa toàn 0), có ưu điểm là không cần dùng brute-force để tìm.
RC trên kia có nói đến cách đưa vào dummy rows, nó cũng khá giống cách anh nói. Ta đưa vào
Cách này và cách của anh sẽ loại bỏ được các chú Pirate khá thông minh nhưng chưa thông minh lắm. Tuy nhiên đó cũng là một bước tiến tới đích. Cách của RC có nhược điểm là các hàng không còn giống nhau nữa(nhưng Pirate vẫn không phân biệt được 1 dummy row với 1 hàng thật ở đó nó không có khóa: giới hạn trên
Còn một loại Pirate có thể coi là rất thông minh thì chúng nó có thể so sánh số khóa ở hữu. Bình thường nếu ta dùng
hàng và nếu
cột nó sở hữu không bị loại bỏ, trung bình nó sẽ sở hữu khoảng
tức là rất nhiều khóa. Do vậy nếu trong phép thử nó thấy nó chỉ có duy nhất 1 khóa nó có thể sẽ từ chối, xác suất nó từ chối nhầm có thể rất rất bé. Tuy nhiên, chống lại loại Pirate này có lẽ hơi khó, phải luôn gửi
hàng gần như là ngẫu nhiên.
Nhưng có thể giảm bới yêu cầu bằng cách xét các threshold-Pirate: nếu nó có từ
khóa trở lên nó sẽ giải mã, dưới thì nhất định không. Đối với loại này RC định đưa các dummy rows toàn 1 vào, mỗi lần gửi
dummy rows loại này+ 1 hàng thât. Tuy nhiên ở đây, kha’c với dummy rows toàn 0, Pirate có thể phân biệt dummy rows toàn 1 và normal row vì giao của
cột với dummy rows toàn 1 cho ra toàn 1, quá bất bình thường.
Đúng như anh nói, adaptive strategy là đủ, và càng “diversify” các phép thử càng làm ta xử lý được các Pirate thông minh hơn.
Hi RC,
Như vậy cách tốt nhất để formalize bài toán và lời giải là dùng cái chiến lược “thử nhóm bên trong thử nhóm” ở trên. Việc xây dựng một ma trận (hoặc chiến lược thử nhóm adaptive) với
mẫu máu dương tính, mỗi phép thử có
mẫu, cũng không khó lắm.
Một trong các cách xây dựng rất đơn giản là chọn các hàng của ma trận này ngẫu nhiên. Ta có thể chứng minh bằng pp xác suất là nếu chọn đủ hàng thì ma trận sẽ là
-disjunct. Lợi điểm của phương pháp này là các hàng trông sẽ rất giống nhau, chú pirate không có cách gì phân biệt được. Cái dở có lẽ là cần hơi nhiều hàng.
Cái threshold-pirate cũng rất thú vị. Nhưng như thế mình phải giả sử
nhỉ.
Hi anh Hưng,
đừng lớn quá theo đó. Nếu
không lớn quá thì số hàng là tiêu chí chúng ta có thể hy sinh không thương tiếc để đạt các mục đích khác quan trọng hơn.
.
Số hàng nhiều không thành vấn đề ạ, miễn là
Đúng là cần giả thiết
RC giải thích 1 chút tại sao số hàng nhiều không thành vấn đề.
. Rõ ràng khi số hàng lớn thì số khóa của mỗi người cũng có thể lớn.
với
là một cặp khóa công khai/bí mật RSA và
là một giá trị cố định không cần bí mật.
, ta chỉ cần cho anh Hưng 1 giá trị
. Từ các khóa công khai anh Hưng sẽ tự tính được
(tất cả các phép tính theo modulo N).
Số hàng liên quan đến độ dài khóa bí mật, vì mỗi hàng tương ứng 1 khóa. Chẳng hạn nếu anh Hưng là một người trong hệ thống, tương ứng với cột 011001 thì có nghĩa khóa bí mật của anh Hưng gồm 3 khóa
Tuy vậy ta có cách gộp các khóa này lại với nhau bằng cách sử dụng RSA: cho cùng 1 modulus N, định nghĩa khóa
Khi đó, thay vì đưa cho anh Hưng 3 khóa
Như vậy dù có nhiều hàng thì khóa cho mỗi người vẫn có thể đưa về 1 giá trị. Chính thế mà số hàng lớn không thành vấn đề (tuy rằng việc chứng minh tính bảo mật sẽ không phải là dễ).
RC vẫn chưa thấy cách xây dựng ma trận ngẫu nhiên cho phép giải quyết vấn đề, đạt 2 mục tiêu:
hàng mỗi lần
cột, cũng bằng các phếp thử
mẫu.
- Giữ mục tiêu loại bỏ một nhóm không cho phép giải mã, bằng cách gửi
- Đạt mục tiêu tìm lại được véc tơ hội của một tập
Anh Hưng có thể nói rõ hơn không? RC nghĩ vẫn nên giữ ý tưởng xây ma trận trên các blocks con?
Hi RC, về phần xây dựng ngẫu nhiên, để mình viết rõ hơn.
Có *hai* ma trận, chắc là confusion đến từ chỗ này.
1. Ma trận
có tính
-disjunct mình vẫn xây dựng như đã mô tả, chia thành
nhóm, mỗi nhóm
rọ. Giả sử ma trận
có kích thước
.
2. Ma trận
thỏa tính chất P1 như RC đã viết. Bây giờ ta chứng minh
cũng thỏa tính chất P2. Tính chất này nói là, chúng ta phải dùng nhiều phép thử, mỗi phép thử là một tập
gồm đúng
hàng của
. Phép thử trả về YES nếu ít nhất một trong
cột “xấu” có giao với
, và trả về NO nếu không cột xấu nào giao với
.
Câu hỏi là, ta phải chọn các phép thử
như thế nào để có thể xác định được vector hội
của
cột xấu? Từ vector hội
chúng ta sẽ giải mã ra được các cột xấu.
Vector hội
là vector nhị phân có số chiều là
. Tổng số số 1 của
nhiều nhất là
, tại vì mỗi cột xấu của
có
số 1. Do đó, bài toán trở thành bài toán chỉ ra vị trí của
số 1 trong một vector
-chiều.
Bài toán này chính là bài toán … thử nhóm! Và do đó ta sẽ dùng một ma trận
-disjunct thứ hai, gọi nó là ma trận
, có
hàng và
cột. Mỗi hàng của
có cân nặng bằng
, tương ứng với một tập con
kích thước
của
.
Nếu ma trận
có tính
-disjunct là xong! Và ta có thể xây dựng
bằng cách chọn các hàng của
một cách ngẫu nhiên. Nói chung có nhiều cách xây dựng
sao cho
là
-disjunct và mỗi hàng của
có cân nặng là
. Điều RC muốn là các hàng của
trông “uniform”. Ta có thể lấy
là tập tất cả các hàng với cân nặng
.
Hi anh Hưng,
là ma trận “ảo”, tức là nó không phục thuộc gì vào
. lúc đầu RC tưởng anh định làm như kiểu mã trong mã ngoài (mỗi cột của
tương ứng một ma trận
) nhưng ko phải.
độc lập có tính chất D-disjunct, mỗi hàng trong số
, nếu các bít 1 của nó là
thì thực chất trong phép thử ma trận
ta sẽ chọn các hàng
: nếu các hàng này giao
thì nó đồng thời có nghĩa phép thử tương ứng trong
chứa máu dương tính. Tìm được vị trí các mẫu dương tính trong
tương ứng cho ta véc tơ hội
.
A ha, ma trận
Tức là xây dựng ma trận
Cách xây dựng rất thú vị! Nếu ma trận
được chọn ngẫu nhiên thì đúng là coi như mỗi lần chọn ngẫu nhiên
hàng trong ma trận
.
Vấn đề theo RC gần như giải quyết trọn vẹn
. Tuy nhiên, ma trận
có hơi ngẫu nhiên quá đến mức Pirate phát hiện ra không? Lý do là khi ta mã thì ta lại không chọn các hàng một cách ngẫu nhiên.
Khi mã, ta chọn block thứ nhất, loại các hàng chứa khóa của tập ta muốn loại, và sử dụng toàn bộ các hàng còn lại. Ta tiếp tục như vậy với block thứ 2, 3… cho đến khi cover toàn bộ tập các users cần gửi. Như vậy cách chọn các hàng không hoàn toàn ngẫu nhiên.
Nhưng có lẽ vấn đề cũng dễ giải quyết: thay vì chọn như trên thì ta chọn các hàng ngẫu nhiên không theo block, việc phân tích số hàng cần thiết có thể hơi khác đôi chủt. Cách thứ hai là vẫn sử dụng y như nguyên cách trên kia, chỉ có điều ta đưa vào thêm một hoán vị ngẫu nhiên các hàng
(kỹ thuật Boneh-Shaw), thay vì sử dụng ma trận
, ta sử dụng ma trận
. Khi đó, dù chọn các hàng theo block thì nếu không biết hoán vị
, nó tương tự như chọn các hàng ngẫu nhiên.
Hi RC, vậy bây giờ đến bước viết các chứng minh ra cụ thể xem có ước lượng sai chỗ nào không. Hôm nay tôi bận mấy cái proposals, mai mốt sẽ viết thử xem có giảm ciphertext size xuống còn
được không; tôi nghĩ là có thể được.
Hi anh Hưng,
. Mỗi hàng có trọng số cỡ
nên để cover
users thì cần ít nhất đã là
hàng. Đó là khi các hàng không giao nhau và không có ai bị loại. Thêm yếu tố bị loai và thêm điều kiện các hàng được chọn ngẫu nhiên theo từng block thì việc mất thêm
cũng là tốt rồi ạ:) Mà trên kia ta tính là
, dưới
một chút.
Theo RC là khó có thể giảm được xuống
Nếu khi nào rảnh anh Hưng viết tường minh được chứng minh của ma trận bên trên thỏa mãn hai tính chất P1, P2 theo ngôn ngữ tổ hợp thì tốt quá (anh Hưng viết tiếng Anh luôn được ko ạ?). RC sẽ viết generic transformation từ loại ma trận này về sơ đồ mật mã và chứng minh tính an toàn.
À, còn 1 điểm nữa. Việc xây dựng ma trận của ta (số hàng, mật độ số 1) dựa trên giả thuyết biết trước số người bị loại là
, đây có lẽ là 1 nhược điểm (một số phương pháp khác không cần) nhưng có lẽ không sao lắm. Điểm lợi thế của ta là ngoài khả năng loại bỏ lại cho phép truy lùng kẻ gian
RC thấy có triển vọng là 1 kết quả tốt