Tải bản đầy đủ (.pdf) (68 trang)

chia sẻ danh sách đen trong lĩnh vực cho vay trực tuyến

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.11 MB, 68 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

ĐẠI HỌC QUỐC GIA TP.HCM

<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA </b>

<b><small>_____________________ </small></b>

<b>Nguyễn Xuân Vĩnh Hưng </b>

<b>CHIA SẺ DANH SÁCH ĐEN TRONG LĨNH VỰC CHO VAY TRỰC TUYẾN </b>

Chuyên ngành: KHOA HỌC MÁY TÍNH Mã số: 8480101

<b>LUẬN VĂN THẠC SĨ </b>

TP. HỒ CHÍ MINH, 01/2024

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

CƠNG TRÌNH ĐƯỢC HỒN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA – ĐHQG-HCM

Cán bộ hướng dẫn khoa học: PGS.TS. Thoại Nam

Cán bộ chấm nhận xét 1: TS. Hà Việt Uyên Synh Cán bộ chấm nhận xét 2: TS. Lê Trọng Nhân

Luận văn thạc sĩ được bảo vệ tại Trường Đại học Bách Khoa, ĐHQG Tp. HCM ngày 23 tháng 01 năm. 2024.

Thành phần Hội đồng đánh giá luận văn thạc sĩ gồm: (Ghi rõ họ, tên, học hàm, học vị của Hội đồng chấm bảo vệ luận văn thạc sĩ)

1. Chủ tịch: TS. Nguyễn Lê Duy Lai 2. Thư ký: TS. Nguyễn Quang Hùng 3. Phản biện 1: TS. Hà Việt Uyên Synh 4. Phản biện 2: TS. Lê Trọng Nhân 5. Uỷ viên: TS. Hà Minh Tân

Xác nhận của Chủ tịch Hội đồng đánh giá LV và Trưởng Khoa quản lý chuyên ngành sau khi luận văn đã được sửa chữa (nếu có).

<b> CHỦ TỊCH HỘI ĐỒNG TRƯỞNG KHOA KHOA HỌC </b>

<b> VÀ KỸ THUẬT MÁY TÍNH </b>

<b> </b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>TRƯỜNG ĐẠI HỌC BÁCH KHOA ___________________ </b>

<b>Độc lập – Tự do – Hạnh phúc __________________ </b>

<b>NHIỆM VỤ LUẬN VĂN THẠC SĨ </b>

Họ tên học viên: NGUYỄN XUÂN VĨNH HƯNG MSHV: 1970589 Ngày, tháng, năm sinh: 07/12/1990 Nơi sinh: Lâm Đồng Chuyên ngành: Khoa học Máy tính Mã số: 8480101

<b>I. TÊN ĐỀ TÀI: CHIA SẺ DANH SÁCH ĐEN TRONG LĨNH VỰC CHO VAY TRỰC TUYẾN </b>

<b>(THE BLACKLIST SHARING IN THE ONLINE LENDING FIELD) II. NHIỆM VỤ VÀ NỘI DUNG: </b>

- Tìm hiểu nghiên cứu cấu trúc dữ liệu Bloom Filter và biến thể cải tiến của nó là Mergeable Counting Bloom Filter để đáp ứng được nhu cầu bài toán.

- Tính tốn những thơng số đầu vào cho Bloom Filter dựa trên dữ liệu đầu vào, như chiều dài mảng dữ liệu, số hàm băm để đảm bảo hiệu suất hệ thống

- Xây dựng cơ chế và và đề xuất kiến trúc hệ thống để chia sẻ dữ liệu một cách hiệu quả.

<b>III. NGÀY GIAO NHIỆM VỤ: 04/09/2023 </b>

<b>IV. NGÀY HOÀN THÀNH NHIỆM VỤ: 18/12/2023 V. CÁN BỘ HƯỚNG DẪN: PGS.TS Thoại Nam </b>

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

i

<b>LỜI CÁM ƠN </b>

Sau một quá trình thực hiện nghiên cứu, em cũng đã hoàn thành nội dung luận văn. Luận văn được hồn thành khơng chỉ là kết quả cố gắng không ngừng nghỉ của bản thân mà cịn có sự giúp đỡ, hỗ trợ tích cực của nhiều cá nhân và tập thể.

Lời đầu tiên, em xin trân trọng tỏ lòng biết ơn chân thành và sâu sắc đến PGS.TS Thoại Nam, thầy là người hướng dẫn trực tiếp trong quá trình thực hiện luận văn và đề cương. Nhờ những chia sẻ và đóng góp ý kiến của thầy giúp em hồn thiện những nội dung Luận văn.

Em cũng xin chân thành cảm ơn đến tồn thể thầy cơ khoa Khoa Học Máy Tính nói riêng và Đại Học Bách Khoa TP Hồ Chí Minh nói chung, đã truyền dạy kiến thức, kinh nghiệm học thuật, nhiệt huyết trong quá trình em theo học khóa cao học.

Cuối cùng, em xin gửi lời cảm ơn chân thành đến gia đình, bạn bè, các anh, chị cùng lớp cao học đã luôn động viên, quan tâm giúp đỡ em trong quá trình học tập và thực hiện luận văn. Những lời động viên của toàn thể mọi người là niềm động lực giúp em vượt qua khoảng thời gian khó khăn nhất trong quá trình học tập và thực hiện luận văn.

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

ii

<b>TÓM TẮT LUẬN VĂN </b>

Chia sẻ dữ liệu trong danh sách đen trong lĩnh vực cho vay trực tuyến là bài toán bài toán xây dựng hệ thống, cơ chế chia sẻ dữ liệu danh sách đen giữa một nhóm các cơng ty tài chính đối tác của nhau nhưng vẫn phải đảm bảo thông tin khách hàng khơng được lộ dù là cho chính đối tác được chia sẻ. Việc chia sẻ giữa hai công ty đối tác với nhau thường được thực hiện thông qua việc đọc giao diện lập trình REST (Representational State Transfer Application Programming Interface), giao thức chia sẻ tập FTP (File Transfer Protocol), chia sẻ tập dữ liệu (exel, csv) qua mail, hoặc cấp quyền truy cập vào cơ sở dữ liệu (database)...Vì mỗi cơng ty có một cách làm khác nhau, khơng nhất qn. Khi mỗi cơng ty tài chính khi tham gia vào hệ thống chia sẻ, phải tốn thời gian, chi phí để tích hợp với hệ thống hiện tại của mình. Hơn nữa việc chia sẻ thơng tin danh sách đen khơng được mã hố (encoded) cũng là lỗ hổng lớn về bảo mật. Nếu tin tặc tấn công thành cơng vào hệ thống của doanh nghiệp, chúng có thể đọc được dữ liệu danh sách đen một cách dễ dàng.

Hiện tại các cơng ty tài chính khơng có một hệ thống chung để chia sẻ dữ liệu tối ưu. Học viên đã dựa trên cấu trúc dữ liệu Bloom Filter để phát triển hệ thống để có thể khắc phục các yếu điểm của mơ hình chia sẻ hiện nay. Hệ thống sẽ được sử dụng Vector Clock để lưu giữ và tra cứu thông tin của sự đóng góp của những thành viên tham gia vào hệ thống. Ngoài ra, Spring framework là nền tảng học viên đã được học viên được sử dụng để xây dựng hệ thống chia sẻ này.

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

iii

<b>ABSTRACT OF DISSERTATION </b>

Sharing data in the blacklist in the online lending field is a problem of building a system, a mechanism for sharing blacklist data among a group of financial companies that are partners of each other but still have to ensure customer information is not exposed even for the partners being shared. Sharing between two partner companies is usually done through reading the REST (Representational State Transfer Application Programming Interface), FTP (File Transfer Protocol) sharing protocol, sharing data files (exel, csv) via mail, or granting access to the database… Because each company has a different way of doing things, it is not consistent. When each financial company participates in the sharing system, it takes time and cost to integrate with its current system. Moreover, the sharing of blacklist information that is not encoded is also a big security hole. If hackers successfully attack the enterprise’s system, they can easily read the blacklist data.

Currently, financial companies do not have a common high-performance data sharing system. The learner has relied on Bloom Filter data structure to develop a system to overcome the shortcomings of the current sharing model. The system will use Vector Clock to store and query contribution information of each member in the blacklist sharing system. In addition, the Spring framework is the platform that the learner has used to build the system.

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

iv

<b>LỜI CAM ĐOAN </b>

Tôi tên Nguyễn Xuân Vĩnh Hưng, học viên cao học khoa Khoa Học Máy Tính, Đại học Bách Khoa TP. HCM, mã học viên 195089. Tôi xin cam đoan luận văn tốt nghiệp: “CHIA SẺ DANH SÁCH ĐEN TRONG LĨNH VỰC CHO VAY TRỰC TUYẾN” là cơng trình nghiên cứu của bản thân. Những phần sử dụng tài liệu tham khảo trong luận văn đã được nêu rõ trong phần tài liệu tham khảo. Các số liệu, kết quả trình bày trong luận văn là hồn tồn trung thực, nếu sai tơi xin chịu hồn tồn trách nhiệm và chịu mọi kỷ luật của bộ môn và nhà trường đề ra.

Nguyễn Xuân Vĩnh Hưng

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

v

<b>Mục Lục</b>

<b>GIỚI THIỆU ĐỀ TÀI ... 1 </b>

<b>1.1 Giới thiệu đề tài ... 1 </b>

<b>1.2 Mô tả bài toán ... 5 </b>

<b>1.3 Mục tiêu và nhiệm vụ của luận văn ... 5 </b>

<b>1.4 Giới hạn đề tài ... 7 </b>

<b>1.5 Đóng góp của luận văn ... 7 </b>

<b>1.6 Tóm tắt nội dung ... 7 </b>

<b>CƠ SỞ KIẾN THỨC ... 9 </b>

<b>2.1. Cấu trúc dữ liệu Bloom Filter ... 9 </b>

<b>2.2. Dương Tính Giả (False Positive) và Số Hàm Băm Tối Ưu K (Optimal K) ... 10 </b>

<b>2.3. Counting Bloom Filter ... 12 </b>

<b>2.4. Dương Tính Giả (False Positive), Số Hàm Băm Tối Ưu (Optimal K), Kích Thước Của Bộ Đếm (Counter Size) và Độ Đếm Tràn (Counter Overflow) của Counting Bloom Filter ... 13 </b>

<b>2.5. Mergeable Counting Bloom Filter ... 16 </b>

<b>3.2. Lamport Clock và Vector Clock ... 32 </b>

<b>PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ ... 33 </b>

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

<b>4.4. Khả năng chịu lỗi ... 46 </b>

4.4.1. Bloom Filter Client không gửi danh sách đen đúng thời gian ... 46

4.4.2. Bloom Filter Server bị sập ... 46

4.4.3. Bloom Filter Client bị sập. ... 47

4.4.4. Trường hợp dữ liệu danh sách đen lớn. ... 47

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

vii

<b>Danh sách hình vẽ </b>

Hình 1.1: Các ứng dụng cho vay trực tuyến trên ví điện tử MoMo ... 2

<i>Hình 1.2: Các ứng dụng cho vay trực tuyến trên ứng dụng My MobiFone ... 4 </i>

Hình 2.1: Mã hố các phần tử a, b,c vào Bloom Filter với số hàm băm bằng 3 ... 10

Hình 2.2: Mã hố các phần tử a, b,c vào Counting Bloom Filter với số hàm băm bằng 3 ... 12

Hình 2.3: Lamport clock cho hệ thống có ba tiến trình ... 25

Hình 2.4 : Vector clock có ba tiến trình ... 28

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

viii

<b>Danh sách bảng </b>

Bảng 2.1 Bảng giá trị của FNV_prime và offset_basic ... 23

Bảng 4.1 Bảng ước tính dung lượng khi số bit được sử dụng ... 34

Bảng 4.2 Các api được hỗ trợ bởi BCS. ... 43

Bảng 4.3 Cấu hình máy tính để khảo sát ... 48

Bảng 4.4: Dung lượng danh sách đen ... 49

Bảng 4.5: Thời gian truy vấn danh sách đen ... 49

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

2

<i>Hình 1.1: Các ứng dụng cho vay trực tuyến trên ví điện tử MoMo </i>

Để duyệt đơn vay của khách hàng, thẩm định tín dụng cá nhân là nghiệp vụ quan trọng của bất kỳ ngân hàng, cơng ty tài chính cho vay nào nhằm đảm bảo khách hàng tốt, có khả năng trả nợ và khơng làm tăng dư nợ xấu cho tổ chức. Để thẩm định khách hàng, các ngân hàng và tổ chức tín dụng được cấp phép của ngân hàng nhà nước sẽ truy cập vào dữ liệu của TRUNG TÂM THƠNG TIN TÍN DỤNG QUỐC GIA VIỆT NAM (CIC) để xem điểm đánh giá điểm tín dụng, số dư nợ của khách hàng đang muốn vay. Tuy nhiên, một số cơng ty tín dụng trong lĩnh vực cho

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

3

vay trên mạng không hoạt động theo giấy phép của Ngân hàng Nhà nước nên chưa thể truy xuất trực tiếp vào cơ sở dữ liệu của CIC. Điều này gây ảnh hưởng lớn tới vận hành của doanh nghiệp, tăng thời gian phê duyệt và giải ngân cho khách hàng. Và việc thiếu thơng tin hơn dẫn đến có thể dẫn tới những quyết định như giải ngân cho khách hàng xấu, ảnh hưởng tới hoạt động của doanh nghiệp. Hơn nữa, hiện nay dù suy thoái kinh tế, nhu cầu vay của người dân vẫn rất cao. Tuy nhiên, các cơng ty tài chính tiêu dùng lại phải thu hẹp danh mục cho vay tiêu dùng do sự nở rộ của các hội/nhóm rủ nhau “bùng nợ” dẫn đến nợ xấu tăng cao. Do đó danh sách đen đóng một vai trị trong việc thẩm định.

Với nhu cầu có thực của các thách thức nêu trên cùng với sự đam mê dành cho việc nghiên cứu các vấn đề thuộc mảng xử lý phân tán và dữ liệu lớn, tác giả quyết định thực hiện cơng trình nghiên cứu "Chia sẻ danh sách đen trong lĩnh vực cho vay trực tuyến". Cụ thể hơn, hệ thống này sẽ giải quyết các bài toán về chia sẻ dữ liệu danh sách đen và bảo mật thông tin giữa các cơng ty tài chính trong lĩnh vực vay trực tuyến tại Việt Nam tuy nhiên vẫn không lộ thông tin khách hàng với chính những công ty đối tác chia sẻ. Về mặt ứng dụng, theo tìm hiểu của của tác giả thì chưa có cơ chế chia sẻ với mục tiêu tương tự được phát triển và công bố nên hứa hẹn đây sẽ là thành phần mới góp mặt thực tiễn vào hoạt động của các cơng ty tài chính cơng nghệ.

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

4

<i>Hình 1.2: Các ứng dụng cho vay trực tuyến trên ứng dụng My MobiFone </i>

Danh sách đen là danh sách những khách hàng, không trả nợ đúng hẹn hoặc do có điểm đánh giá thấp bởi hệ thống ra quyết định (Decision making system). Khách hàng sẽ được thêm vào bởi bằng số điện thoại, số chứng minh nhân dân (CMND), số căn cước công dân (CCCD), hoặc số tài khoản ngân hàng.... Tuỳ vào độ rủi ro mà khách hàng sẽ nằm trong danh sách đen một thời hạn ngắn hay dài xác định trước. Do đó danh sách đen sẽ biến động theo thời gian. Xây dựng một hệ thống chia sẻ danh sách đen nội bộ của mỗi công ty nhằm hạn chế bớt những khách hàng không tốt, tránh gây thất thốt tài sản của các cơng ty và giảm tải công việc cho các nhân viên vận hành cũng là mục tiêu của luận văn này.

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

5

<b>1.2 Mơ tả bài tốn </b>

Bài tốn “Chia sẻ danh sách đen trong lĩnh vực cho vay trực tuyến” là bài toán xây dựng cơ chế chia sẻ dữ liệu và kiến trúc giữa những công ty tài chính cơng nghệ là đối tác của nhau mà không làm lộ thông tin của khách hàng dù là cho chính đối tác đó bằng cách sử dụng ý tưởng của cấu trúc dữ liệu Bloom Filter. Trong đó, hệ thống ở mỗi tổ chức trong mạng lưới chia sẻ gửi dữ liệu danh sách các khách hàng đã được mã hoá theo cùng với nhãn thời gian (timestamp) tới một đối tác khác. Hệ thống phải đảm bảo dữ liệu được gửi đi một cách an toàn và nhanh chóng, đề phịng trường hợp một đối tượng hay tổ chức tội phạm khác khi có được dữ liệu trên cũng không thể sử dụng được. Việc kiểm tra xem số điện thoại người vay có nằm trong danh sách đen phải đảm bảo một hiệu suất tốt và đáng tin cậy. Sự tin cậy ở đây là trả lời được câu hỏi khách hàng với số điện thoại xác định có nằm trong danh sách đen với 1 tỷ lệ sai sót mức chấp nhận được. Những thách thức cần mà bài toán cần giải quyết:

- Định dạng của từng phần tử trong danh sách đen khi chia sẻ: Mỗi công ty tài chính sẽ số điện thoại theo một định dạng khác nhau.

- Xây dựng vector dữ liệu danh sách đen: dựa trên cấu trúc dữ liệu BloomFilter. Khi thêm dữ liệu vào BloomFilter, yêu cầu là cần xây dựng những hàm băm với chi phí nhỏ nhất và với hiệu suất cao nhất để giảm tỷ lệ dương tính giả (false positive) vì lượng dữ liệu trong danh sách đen khá là lớn. Một thách thức khác là Bloom Filter chỉ hỗ trợ việc thêm một phần tử vào, khơng hỗ trợ xóa phần tử đã thêm.

- Bài toán chia sẻ dữ liệu danh sách đen giữa các tổ chức tín dụng.

<b>1.3 Mục tiêu và nhiệm vụ của luận văn </b>

Mục tiêu của luận văn hướng đến việc nghiên cứu và xây dựng kiến trúc hệ thống cho việc chia sẻ dữ liệu danh sách đen sử dụng các nền toán cấu trúc dữ liệu Bloom Filter. Cụ thể là:

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

- Đề xuất kiến trúc của hệ thống .

- Cuối cùng, học viên sẽ hiểu rõ hơn những vấn đề, thách thức khi áp dụng trong môi trường phân tán để giải quyết một bài toán thực tế bài tốn thực tế. Đánh giá tính khả thi của các phương pháp trong thực tiễn, đồng thời sẽ có góc nhìn chính xác hơn về tính tốn hiệu suất cao trong mơi trường phân tán nói chung.

Từ mơ tả bài tốn, tác giả sẽ lần lượt giải quyết các vấn đề sau để đưa ra một giải pháp thiết kế và hiện thực một kiến trúc hệ thống giải quyết được bài toán của đề tài:

- Tìm hiểu nghiên cứu cấu trúc dữ liệu Bloom Filter và các biến thể cải tiến của nó là Counting Bloom Filter và Mergeable Counting Bloom .

- Tính tốn những thông số đầu vào cho Bloom Filter dựa trên dữ liệu đầu vào như độ dài mảng mảng số nguyên, số hàm băm tối ưu, tỷ lệ dương tính giả.

- Thiết kế khảo sát, quyết định số lượng hàm băm cho Bloom Filter để đảm bảo hiệu suất việc truy xuất hiệu quả.

- Nghiên cứu Lamport clock và Vector clock .

- Xây dựng cơ chế để chia sẻ giữa giữa hai cơng ty tài chính đối tác.

- Hiện thực và đánh giá tính đúng đắn hệ thống.

- Kết luận các vấn đề đã giải quyết, nêu ra các vấn đề còn tồn đọng, đồng thời đưa ra các dự định cải tiến trong tương lai.

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

<b>1.5 Đóng góp của luận văn </b>

Trong luận văn, tác giả giải quyết bài toán thực tiễn và bức thiết trong lĩnh vực tài chính tiêu dùng. Đóng góp của luận văn bao gồm:

- Kiến trúc và cơ chế chia sẻ dữ liệu.

- Ứng dụng hiệu quả các công trình nghiên cứu.

- Áp dụng cơng nghệ mới nhất đang được sử dụng rộng rãi, để hiện thực hệ thống.

<b>1.6 Tóm tắt nội dung </b>

Nội dung của luận văn gồm 5 chương:

− <b>Chương 1 GIỚI THIỆU ĐỀ TÀI: giới thiệu về hiện trạng của ngành tài </b>

chính, cụ thể là cho vay tiêu dùng, cho vay trực tuyến và nhu cầu thực tế trong việc chia sẻ dữ liệu danh sách đen mơ tả bài tốn chia sẻ danh sách đen trong lĩnh vực cho vay trực tuyến.

− <b>Chương 2 CƠ SỞ KIẾN THỨC: là các cơ sở lý thuyết mà học viên sử </b>

dụng trong luận văn này, bao gồm các lý thuyết cơ bản về Bloom Filter, các thuộc tính của Bloom Filter và biến thể cải tiến khác của Bloom Filter là Counting Bloom Filter hay Mergeable Counting Bloom Filter, các hàm băm được sử dụng trong Bloom Filter, lý thuyết về Lamport Clock và Vector Clock.

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

8

− <b>Chương 3 CÁC CƠNG TRÌNH NGHIÊN CỨU LIÊN QUAN: nói về các </b>

cơng trình nghiên cứu liên quan tới Bloom Filter. Từ đó các cải tiến của cấu trúc dữ liệu mới lần lượt ra đời, và đó cũng là cơ sở quan trọng cho ứng dụng của tác giả trong luận văn.

− <b>Chương 4 PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ: Chương 4 nói cụ </b>

thể về các mơ hình đề xuất của học viên cho bài tốn chia sẻ danh sách đen.

− <b>Chương 5 KẾT LUẬN: Tổng kết các đóng góp của luận văn, các vấn đề </b>

còn tồn tại của bài tốn chia sẻ danh sách đen đồng thời nói về khả năng phát triển trong tương lai.

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

10

Hình 2.1<i>: </i>Mã hố các phần tử a, b,c vào Bloom Filter với số hàm băm bằng 3

<b>2.2. Dương Tính Giả (False Positive) và Số Hàm Băm Tối Ưu K (Optimal K) </b>

Cho m là chiều dài của mảng bit. n là tổng số phần tử trong tập hợp và k là tổng số hàm băm. Vậy Xác suất của 1 bit vẫn bằng 0 sau khi đã thêm vào n phần tử là:

Vậy xác suất bit đó là 1 là:

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

11

Vậy một đối tượng bất kỳ, và chưa được mã hóa trong Bloom Filter , thì xác suất mà tất cả bit ở chỉ mục trả của hàm băm H của đối tượng trả về được bật là:

(2.3) Trong đó là hằng số tự nhiên Euler.

<i>Rõ ràng, tỷ lệ dương tính giả sẽ giảm khi độ dài của mảng m tăng, và giảm khi </i>

số lượng phần tử n được thêm vào Bloom Filter tăng. Để tìm ra số hàm băm tối ưu, ta có thể lấy đạo hàm công thức 2.3 theo k, cho vế bên trái bằng 0 và giải phương trình.

(2.4)

(2.5) Khi số hàm k* được sử dụng, ta thay vào hàm tính dương tính giả cơng thức2.3 sẽ là fB*:

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

12

- <i> là tỷ lệ dương tính giả khi số hàm băm tối ưu được sử dụng. </i>

<b>2.3. Counting Bloom Filter </b>

Việc loại bỏ một phần tử trong Bloom Filter là khơng thể. Bởi vì mỗi bit bằng 1 sẽ được sử dụng chung bởi các phần tử khác nhau. Ta khơng thể đơn giản gán bit thành 0 được vì nó dẫn tới việc lược bỏ một phần tử khác. Counting Bloom Filter

<i>dùng một mảng của bộ đếm (counter) C với chiều dài l. Mỗi bộ đếm trong mảng đều </i>

được khởi tạo là 0. Cũng giống như Bloom Filter truyền thống, chúng ta mã hoá một phần tử e bằng k hàm băm . Mỗi hàm băm sẽ trả về giá trị từ 0 tới l - 1 là chỉ mục của trong mảng bộ đếm C. Chúng ta sẽ tăng giá trị của bộ đếm tại vị trí của số đếm lên 1.

Hình 2.2: Mã hố các phần tử a, b,c vào Counting Bloom Filter với số hàm băm bằng 3

Khi muốn xoá một phần tử e khỏi tập hợp, chúng ta cũng băm phần tử đó và có tập giá trị các chỉ mục . ta sẽ giảm giá trị tại các vị trí

số đếm xuống 1.

Khi kiểm tra một phần tử bất kỳ e’ có nằm trong Counting Bloom Filter không, ta cũng băm đối tượng thành bằng k hàm băm . Sau đó

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

13

kiểm tra giá trị tại các vị trí do hàm băm trả về trong mảng C có khác 0 hay không? Nếu tất cả đều khác 0,

<b>thì có thể kết luận đối tượng đó nằm trong tập hợp. </b>

<b>2.4. Dương Tính Giả (False Positive), Số Hàm Băm Tối Ưu (Optimal K), Kích Thước Của Bộ Đếm (Counter Size) và Độ Đếm Tràn (Counter Overflow) của Counting Bloom Filter </b>

Cho là chiều dài của mảng bộ đếm, là tổng số phần tử đã được mã hả trong Counting Bloom Filter tập hợp và là số hàm băm. Cùng phương pháp phân tích như phần 2.2, ta có xác xuất 1 phần tử trong mảng số là 0 sau khi đã thêm n phần tử là:

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

- là số lượng hàm băm tối ưu.

<i>- là chiều dài của mảng bộ đếm </i>

- là tổng số phần tử đã được mã hóa trong Bloom Filter. - là hằng số tự nhiên Euler.

- <i> là tỷ lệ dương tính giả. </i>

- <i> là tỷ lệ dương tính giả khi số hàm băm tối ưu được sử dụng. </i>

Như vậy, Counting Bloom Filter có cùng tỷ lệ dương tính giả với Bloom Filter truyền thống.

<i>Bộ Đếm trong Counting Bloom Filter là được chỉ định trước và có giới hạn. Tất </i>

<i>cả đều có cùng độ dài cố định. Giả sử, mỗi bộ đếm có t bit. Giá trị của bộ đếm là từ </i>

khoảng tới . Nếu giá trị bộ đếm đang là và ta mã hoá một phần tử

<i>mới, bộ đếm sẽ tăng lên 1, tràn bộ đếm (counter overflow) sẽ xảy ra. Nếu giá trị càng nhỏ, thì việc tràn bộ đếm sẽ xảy ra thường xuyên hơn. Tuy nhiên nếu giá trị </i>

lớn sẽ tốn bộ nhớ. Cho là một biến ngẫu nhiên là giá trị của bộ đếm sau n lần thêm phần tử vào BloomFilter, sẽ tuân theo phân phối xác suất Binomial: .

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

15

Ở đây, được xác định bởi công thức:

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

16

Ý nghĩa các ký hiệu trong phần 2.4 :

- là xác suất để điều kiện đó xảy ra.

<i>- là chiều dài của mảng bộ đếm . </i>

- là giai thừa của biến x. - là hằng số tự nhiên Euler. - là logarit cơ số tự nhiên e.

- là tổng số phần tử có trong Bloom Filter.

- là phép tổng.

Trong thực tế, nếu tràn bộ đệm xảy ra, ta vẫn có thể giữ giá trị của bộ đếm. Nhưng qua quá nhiều phân tử, có thể dẫn tới tình huống tỷ lệ dương tính giả cao.

<b>2.5. Mergeable Counting Bloom Filter </b>

Nếu chúng ta sử dụng Bloom Filter, thì việt kết hợp hai hay nhiều vector khá đơn giản, chỉ cần OR bit tương đương trong vector. Tuy nhiên, Counting Bloom Filter (CBF) không hỗ trợ việc kết hợp hai vectors dữ liệu do CBF không lưu thông tin về hai phần hay nhiều phần tử trùng nhau. Nếu chúng ta có 2 CBF là CBF1và CBF2. Khi hợp CBF1 và CBF2, ta sẽ cộng từng phần tử i của mảng bộ đếm CBF1 và CBF2. Nếu có quá nhiều phần tử trùng trong cả hai CBF trên thì có thể dẫn bộ đếm tràn.

Để giải quyết vấn đề này, Wengjin Liu và nhóm tác giả đã đưa ra giải pháp Mergeable Counting Bloom Filter (mergeCBF), dựa trên sử dụng thuật toán xếp

<i>lịch Cuckoo. Ý tưởng của mergeCBF là tách các mảng bộ đếm (counter array) thành </i>

một nhóm các mảng bit và sắp xếp các mảng theo một thứ tự cố định để ghi nhận những phần tử đã được thêm vào.

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

17

Cấu trúc của mergeCBF:

- hàm băm, số lượng hàm băm tối ưu theo công thức 2.11 .

- Một nhóm gồm mảng bit , trong đó là giá trị lớn

<b>2.5.1. Thêm một phần tử </b>

Để thêm một phần tử vào mergeCBF, ta không chỉ băm phần tử đó bằng k hàm băm mà cịn phải sắp xếp các và chọn mảng bit nào để chứa các giá trị trả về của hàm băm. Để đảm bảo việc xếp các bit vào mảng bit một cách ít đụng độ và hiệu quả, nhóm tác giả dùng giới thiệu một thuật toán lấy ý tưởng từ thuật toán Cuckoo Hash tên là thuật toán sắp xếp virtual-Cuckoo. Ý tưởng của thuật tốn Cuckoo hash là tìm ra vị trí của phần tử trong mảng, nếu vị trí ơ trong mảng đã có một phần tử chiếm dụng, chúng ta sẽ đẩy phần tử đã có ra khỏi ơ đó, chèn phần tử mới vào ơ hiện tại, tìm một vị trí mới cho phần tử cũ. Q trình này tiếp diễn cho tới khi khơng cịn đụng độ nửa. Cuckoo Hash đảm bảo việc sử dụng bộ nhớ một cách hiệu quả vì nó khuyến khích nhiều ô trong mảng được sử dụng hơn.

Trong mergeCBF, chúng ta ghi nhận một phần tử với “1” k bit trong k ô. Với virtual-Cuckoo, nếu chỉ mục của hàm băm trả về đã là là trong mảng bit đã được bật là “1”, chúng ta không cần đẩy giá trị bit “1” ra khỏi ơ đó và chèn bit “1” vào ô khác. Chúng ta sẽ bỏ qua ơ đã bị chiếm dụng và tìm một khác cho phần tử mới. Kết quả thuật toán vẫn tuân thủ theo quý ước của Cuckoo Hash. Thuật tốn virtual-Cuckoo được mơ tả dưới đây

<b>Input</b>

<b>: </b>

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

Thuật toán virtual-Cuckoo.

Thuật tốn thêm một phần tử vào mergeCBF được mơ tả như sau:

- Băm một phần tử với k hàm băm . Giá trị trả về tương ứng là kết trả về của hàm băm cũng là chỉ mục trong mảng bit.

- Với mỗi , ta dùng thuật toán sắp xếp virtual-Cuckoo để tìm mảng bit mà giá trị tại , ta bật .

- Lặp lại quá trình trên k lần cho k hàm băm tới khi tất cả bit trả về từ hàm băm được bật.

<b>2.5.2. Truy vấn một phần tử </b>

Để truy vấn một phần tử, ta chỉ cần băm phần tử đó bằng k hàm băm và kiểm tra các ô ở chỉ mục của hàm băm trả về ở mảng orBarr. Nếu tất cả các chỉ mục đều được bật, thì phần tử có thể nằm trong mergeCBF. Cịn ngược lại, nếu một trong các ơ chưa được bật, thì phần tử đó chắc chắn khơng nằm trong mergeCBF.

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

19

<b>2.5.3. Xóa phần tử </b>

Để xóa một phần tử, cơ chế cũng giống như là thêm phần tử. Chúng ta sử dụng thuật tốn virtual-Cuckoo để tìm ra ô cuối cùng và tắt bit đó thành 0. Thuật tốn mơ tả như sau:

- Ước lượng tổng số lượng phần tử trong hai mergeCBF để không vượt quá sức chứa của mergeCBF. Nếu vượt qua thì ta dừng lại quá trình và báo cáo lại lỗi.

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

Một hàm băm tốt cho Bloom Filter cần đáp ứng một số yêu cầu quan trọng. Đầu tiên, nó phải có khả năng tạo ra các chỉ mục phân phối đều nhau trên mảng bit. Điều này đảm bảo rằng sự phân tán của các phần tử trong tập hợp không tạo ra sự đụng độ lớn, từ đó giảm thiểu tỷ lệ dương tính giả. Thứ hai, hàm băm phải có khả năng xử lý nhanh và hiệu quả để đảm bảo thời gian truy vấn Bloom Filter được giảm thiểu. Do đó cái hàm băm cho mật mã như SHA256 không phải là lựa chọn tối ưu. Thứ ba các hàm băm dùng cho Bloom Filter nên độc lập với nhau để đảm bảo tỷ lệ dương tính giả thấp, bảo mật cho Bloom Filter để tránh cho kẻ tấn cơng có thể suy luận, tận dụng cái mối quan hệ để tìm ra các hàm băm còn lại và đảm bảo về hiệu suất khi chúng ta có thể tính tốn băm đồng thời và độc lập.

Có nhiều hàm băm phổ biến được sử dụng trong Bloom Filter như MurmurHash, FNV, và XXXHash. Mỗi hàm băm này có đặc điểm riêng và được thiết kế để đáp ứng các yêu cầu của Bloom Filter.

<b>2.6.1. MurmurHash </b>

MurmurHash được tạo ra bởi Austin Appleby vào năm 2008. MurmurHash là một thuật toán băm phi tuyến tính, có khả năng tạo ra giá trị băm ngẫu nhiên từ dữ liệu đầu vào. Nó sử dụng một sự kết hợp của các phép dịch bit, phép XOR và phép nhân để tạo ra giá trị băm.

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

21

Một trong những ưu điểm nổi bật của MurmurHash là tốc độ xử lý nhanh và khả năng phân tán dữ liệu hiệu quả. Thuật toán này tận dụng cơ chế băm tương tự như việc trộn và xoá bit, tạo ra giá trị băm với độ phân tán cao và ít đụng độ.

MurmurHash có thể được sử dụng cho nhiều loại dữ liệu khác nhau, bao gồm chuỗi ký tự, số nguyên, dữ liệu nhị phân và hơn nữa.

<i>MurmurHash cũng có tính chất tốt về khả năng trộn (avalanche effect), tức là </i>

thay đổi nhỏ trong đầu vào sẽ dẫn đến thay đổi lớn trong giá trị băm đầu ra. Điều này giúp tránh hiện tượng đụng độ và tăng tính ngẫu nhiên của giá trị băm. Tuy nhiên, cần lưu ý rằng MurmurHash không phải là một hàm băm không dùng cho mục đích bảo mật.

MurmurHash có ba phiên bản:

- MurmurHash 1 là một hàm băm 32-bit.

- MurmurHash 2 là phiên bản cải tiến của MurmurHash 1, được thiết kế để khắc phục một số hạn chế và lỗ hổng. Nó hoạt động trên nền tảng 32-bit hoặc 64-bit và tạo ra giá trị băm 32-bit.

- MurmurHash 3 là phiên bản mới nhất của họ MurmurHash và cung cấp nhiều cải tiến. Nó hỗ trợ giá trị băm 32 bit và một 128 bit và đồng thời chống lại sự tấn công hàm băm.

Thuật tốn MurmurHash cho giá trị băm 32 bit được trình bày dưới dạng mã giả dưới đây:

<b>Input: </b>

<i>data</i>

<i> ;</i>

data dược hash

<i>seed; giá trị khởi tạo </i>

<b>Output: </b>

<i>; giá trị băm trả về </i>

<i>1: c1 ← 0xcc9e2d51; 2: c2 ← 0x1b873593; 3: r1 ← 15; </i>

<i>4: r2 ← 13; 5: m ← 5; </i>

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

22

<i>6: n ← 0xe6546b64; 7: length ← data.length; </i>

<i><b>8: for each fourByteChunk of data do </b></i>

<i>9: k ← fourByteChunk </i>

<i>10: k ← k × c1 </i>

<i>11: k ← k ROL r1 </i>

<i>12: k ← k × c2 </i>

<i>13: hash ← hash XOR k </i>

<i>14: hash ← hash ROL r2 </i>

<i>15: hash ← (hash × m) + n; </i>

<b>16: with any remainingBytesInKey do </b>

<i>17:remaining_bytes ← length mod by 4; </i>

<i><b>18: if remaining_bytes > 0 then </b></i>

<i>19: last_chunk ← last remaining_bytes of data </i>

<i>20: last_chunk ← last_chunk ROL (8 × remaining_bytes); </i>

<i>25: hash ← hash XOR length; </i>

<i>26: hash ← hash XOR (hash >> 16); 27: hash ← hash ×0x85ebca6b ; 28: hash ← hash XOR (hash >> 13); 29: hash ← hash × 0xc2b2ae35; 30: hash ← hash XOR (hash >> 16); </i>

<i><b>31: return hash; </b></i>

<b>2.6.2. FNV </b>

FNV (Fowler-Noll-Vo) là một thuật toán băm đơn giản và hiệu quả được sử dụng trong nhiều ứng dụng. Thuật toán này được đặt tên theo tên ba tác giả: Glenn Fowler, Landon Curt Noll và Phong Vo. Hai phiên bản phổ biến của FNV là FNV-1 và FNV-1a.

Thuật toán FNV-1 được mô tả dưới đây:

<b>Input: </b>

<i>data ;data dược hash </i>

<i>FNV_prime;giá trị FNV_prime trong bảng trên offset_basic;Giá trị offset_basic trong bảng trên </i>

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

23

<i><b>Output: </b></i>

<i>hash; giá trị băm trả về </i>

<i><b>1: hash = offset_basic 2: for byte in data do </b></i>

<i>3: hash ← hash × FNV_prime </i>

<i>4: <b>hash ← hash XOR byte </b></i>

<b>5: end for </b>

<i><b>6: return hash; </b></i>

Thuật toán FNV-1. Thuật toán FNV-1a được mô tả dưới đây:

<b>Input: </b>

<i>data ; data dược hash </i>

<i>FNV_prime; giá trị FNV_prime trong bảng trên offset_basic; Giá trị offset_basic trong bảng trên </i>

<i><b>Output: </b></i>

<i>hash; giá trị băm trả về </i>

<i><b>1: hash ← offset_basic 2: for byte in data do </b></i>

<i>3: hash ← hash XOR byte </i>

<i>4: <b>hash ← hash × FNV_prime </b></i>

<b>5: end for </b>

<i><b>6: return hash; </b></i>

Thuật toán FNV-1a.

Sự khác biệt duy nhất giữa FNV-1a và FNV-1 là thứ tự của phép toán nhân và phép tốn XOR. Trong đó các giá trị của FNV_prime và offset_basic là các giá trị phụ thuộc vào chiều dài của giá trị băm được trả về được định nghĩa ở bảng sau:

Bảng 2.1 Bảng giá trị của FNV_prime và offset_basic

<b>Số bit </b> 32 64 128 256

<b>FNV_prime </b> <sup>224 + 28 + </sup>

0x93 = 16777619

240 + 28 + 0xb3 = 1099511628

288 + 28 + 0x3b =

2168 + 28 + 0x63 = 37414441915

</div>

×