Nó năm 2018. Chúng ta sống trong tương lai. Chúng tôi có thể đặt một chiếc bánh pizza, xem nó được làm và xem nó được giao đến nhà của chúng tôi. Vậy tại sao chúng ta có thể bỏ phiếu trực tuyến?

Hãy bắt đầu với một số nền tảng về ngôn ngữ lập trình là gì và tại sao chúng ta cần chúng. Ngay sau đó, bạn sẽ thấy lý do tại sao bạn không bao giờ muốn bỏ phiếu trực tuyến (và tại sao bạn không bao giờ muốn có một máy tính ở bất cứ đâu gần bạn khi bạn bỏ phiếu).

Bạn có thể biết máy tính chạy trên hệ nhị phân, 1 và 0. Và viết bằng nhị phân rất khó, trên thực tế, về cơ bản, không ai muốn làm điều đó. Ngay cả khi bạn thành công trong việc này, những gì bạn tạo ra chỉ là một loạt các con số và sẽ rất khó cho bất cứ ai, kể cả bạn trong một vài tuần, một khi bạn quên những gì bạn đã viết ra để tìm ra mã của bạn thực sự làm

Vì vậy, thay vào đó, các nhà khoa học máy tính của chúng tôi đã phát minh ra các ngôn ngữ máy của Google. Đây là những khái niệm trừu tượng thay đổi mã nhị phân thành một thứ mà ít nhất một chút gần gũi hơn với ngôn ngữ mà con người nói. Họ vẫn còn cơ bản, nhưng họ là một bước đi đúng hướng. Ngôn ngữ máy được dựa trên cơ sở dữ liệu và gắn liền với phần cứng của bất kỳ máy nào mà họ thiết kế cho. Vì vậy, trong khi bạn không thể nói điều gì đó dễ dàng như, cộng 10 và 20 lại với nhau và in kết quả đó ra màn hình, bạn có thể nói rằng, đặt giá trị 10 vào đăng ký một, đặt giá trị 20 vào đăng ký hai, đưa cả hai thanh ghi này vào adder one, và đưa đầu ra vào thanh ghi ba, và in nội dung của thanh ghi ba lên màn hình. Ngôn ngữ máy sau đó được dịch ra, đây được gọi là một bản dịch được biên dịch trong các tập tin nhị phân 1 và 0 để thực sự chạy trên máy tính của bạn .

Có một nhược điểm rõ ràng ở đây: Bạn cần phải làm quen với phần cứng máy tính của bạn để viết bằng ngôn ngữ máy và mọi kiến ​​trúc máy tính của máy tính hơi khác nhau. Thêm vào đó, bạn phải xác định rõ ràng từng bước của quy trình. Đó là một nỗi đau. Nhưng nhược điểm là khi bạn nhìn vào một chương trình được viết bằng ngôn ngữ máy, những gì diễn ra rõ ràng hơn, đặc biệt là so với việc nhìn vào một dòng vô tận 1 và 0 trong nhị phân.

Bất kể bạn viết gì, bạn cũng tin tưởng vào trình biên dịch để biến chính xác những gì bạn đã viết thành mã nhị phân. Nếu tôi muốn làm hỏng kết quả của bạn, tất cả những gì tôi cần làm là gây rối với trình biên dịch của bạn.

Bước tiếp theo là trừu tượng hóa phần cứng, vì vậy bạn thực sự không cần biết vị trí của những thứ như các trình bổ sung của bộ điều hướng và bộ điều khiển. Nếu bạn xây dựng một trình biên dịch đủ thông minh, bạn có thể thiết kế các ngôn ngữ lập trình độc lập với máy, với các hướng dẫn trừu tượng hơn có thể dễ dàng xử lý những thứ như, cộng 10 và 20 lại với nhau và in kết quả đó ra màn hình. Sau đó, bạn sẽ dựa vào trình biên dịch để dịch nó sang ngôn ngữ máy và sau đó thành nhị phân.

Mặc dù tất cả các ngôn ngữ lập trình này đều có những cách tiếp cận khác nhau để giải quyết vấn đề này, nhưng chúng có chung một mục tiêu: làm cho mã máy tính dễ đọc hơn, giúp dễ hiểu và dễ bảo trì hơn. Ngôn ngữ lập trình ngày nay làm cho việc in kết quả 10 + 20 trở nên đơn giản như cách viết này:

in 10 + 20

Bạn có phát hiện ra lý do bạn có thể tin tưởng bất kỳ máy tính nào không?

Tôi sẽ cung cấp cho bạn một gợi ý: Nó có trong trình biên dịch.

Bất kể bạn viết gì, bạn cũng tin tưởng vào trình biên dịch để biến chính xác những gì bạn đã viết thành mã nhị phân. Nếu tôi muốn làm hỏng kết quả của bạn, tất cả những gì tôi cần làm là gây rối với trình biên dịch của bạn.

Vd Bạn không bao giờ tìm thấy trục trặc chỉ bằng cách nhìn vào mã nguồn của mình bởi vì đó không phải là trục trặc. Nó ẩn trong trình biên dịch.

Ví dụ đó là cơ bản và bạn đã phát hiện ra nó khá nhanh vì chương trình của bạn rõ ràng sẽ bị hỏng. Nhưng nếu tôi làm điều gì đó tinh tế hơn thì sao? Điều gì sẽ xảy ra nếu thay vì làm rối với lệnh in ra của Wap, tôi đã thay đổi trình biên dịch để bất cứ khi nào nó phát hiện ra mã liên quan đến mật khẩu, nó đã làm cho nó để mật khẩu mật mã ryaniscool.

Nó không phải là kết thúc của thế giới nếu ai đó đột nhập và thấy bánh pizza của tôi được giao. Không ai quan tâm đủ để cố gắng phá vỡ nó. Nhưng bỏ phiếu không phải là một trong những trường hợp đó.

Nếu tôi làm điều đó, tôi sẽ có cái mà Liêu gọi là một cửa sau của Google vào mọi chương trình máy tính mà bạn xây dựng với trình biên dịch của tôi. Nói cách khác, bạn có thể khóa cửa trước của mình tất cả những gì bạn muốn, nhưng điều đó không quan trọng bởi vì tôi có một cánh cửa bí mật xung quanh phía sau không ai biết. Bất kể bạn viết gì, cho dù mã mật khẩu của bạn an toàn đến mức nào, mật khẩu của tôi về ryaniscool, tôi cũng sẽ làm việc và bạn đã giành được ngay cả khi biết nó.

Rõ ràng, đây là một vấn đề. Và bạn có thể nghĩ rằng, nhưng trình biên dịch là chương trình máy tính giống như bất kỳ chương trình nào khác. Tôi có thể nhìn vào mã nguồn của trình biên dịch của mình để chắc chắn rằng không có mã độc nào ở đó. Tất cả những gì tôi cần làm là tìm phần nói về việc thêm ‘ryaniscool, làm mật khẩu, lấy nó ra và tôi sẽ ổn. Đúng?"

Và bạn có thể. Ngoại trừ, như bạn đã nói, trình biên dịch là chương trình máy tính như bất kỳ chương trình nào khác. Và điều đó có nghĩa là chính chúng được biên soạn.

Ở đây, tất cả những gì tôi cần phải làm để khai thác điều đó:

Bước 1

Như trước đây, tôi viết mã viết thêm mã ryaniscool, mật khẩu hợp lệ vào bất cứ thứ gì nó biên dịch và đưa mã này vào trình biên dịch. Tại thời điểm này, tôi đã thêm một cửa sau vào bất cứ thứ gì trình biên dịch biên dịch, nhưng tôi sẽ bị bắt nếu có ai nhìn vào nguồn của trình biên dịch của tôi. Vì vậy, tôi đi đến Bước 2.

Bước 2

Tôi viết mã cho trình biên dịch phát hiện khi nó biên dịch chính nó và khi điều đó xảy ra, nó sẽ thêm mã cho bước 1 vào trình biên dịch. Bây giờ, khi tôi biên dịch trình biên dịch, nó tạo ra một phiên bản mới của chính nó sẽ thêm vào các hướng dẫn của trình biên dịch để biết cách chèn mật khẩu của ryaniscool vào bất cứ khi nào trình biên dịch được xây dựng lại. Và để che dấu vết của tôi, tất cả những gì tôi cần phải làm là xóa các hướng dẫn độc hại khỏi nguồn trình biên dịch, và tôi đã thực hiện.

Bất cứ khi nào trình biên dịch được xây dựng lại, nó sẽ tự xây dựng sao cho nó sẽ chứa các hướng dẫn để thêm cửa sau của tôi. Bất cứ khi nào trình biên dịch đó xây dựng một cái gì đó khác, nó sẽ tuân theo các hướng dẫn đó và xây dựng cửa sau của tôi ngay. Và won giành được một dòng mã độc còn lại trong bất kỳ mã nguồn nào tiết lộ nó.

Cách duy nhất để phát hiện ra lỗi này là tự mình vượt qua mã nhị phân, một nhiệm vụ bắt đầu khó khăn và trở nên bất khả thi theo nghĩa đen khi các chương trình trở nên phức tạp hơn. Các tác phẩm hoàn chỉnh của William Shakespeare có giá dưới 6 megabyte. Chỉ riêng trình duyệt Firefox chỉ cần 200 megabyte để cài đặt nó và chỉ có một chương trình trên máy tính của bạn. Không có một người còn sống đã đọc tất cả 200 megabyte của mã đó. Nó thậm chí không được viết bằng một ngôn ngữ được thiết kế cho con người để đọc.

Tại sao chúng ta sử dụng những cỗ máy ác mộng này?

Chẳng có gì mới. Vào năm 1984, Ken Thompson, người đã thiết kế và triển khai Unix, tổ tiên của hệ điều hành, hầu hết các máy tính và điện thoại chạy trên hệ thống đã trình bày một bài báo có tên là Refl Reflection on Trusting Trust Trust và đã đi đến kết luận này:

Đạo đức là hiển nhiên. Bạn có thể tin tưởng mã mà bạn không hoàn toàn tự tạo ra bản thân mình Không có số lượng xác minh hoặc kiểm tra mức độ nguồn sẽ bảo vệ bạn khỏi việc sử dụng mã không tin cậy.

Bởi vì hoàn toàn tự tạo ra, nhưng Ken Ken không có nghĩa là một chương trình mà bạn đã viết, nhưng một chương trình bạn đã viết toàn bộ ngăn xếp cho: mọi thứ đều thuộc về trình biên dịch. Rất ít người có thời gian, kỹ năng và tiền bạc để xây dựng một máy tính từ đầu, bao gồm tất cả các phần mềm trên đó. Đây dường như là một viên đạn trong đầu vì tin tưởng máy tính với bất cứ thứ gì.

Tuy nhiên, chúng tôi tin tưởng máy tính với tất cả các loại. Vì vậy, những gì cho? Tại sao chúng ta sử dụng những cỗ máy ác mộng này?

Vâng, đối với một điều, máy tính là thực sự thú vị và thuận tiện. Và họ thực tế theo nhiều cách. Bên cạnh đó, một hack trình biên dịch có thể rất khó để thực hiện: Bạn đã cần thời gian và động lực để nhắm mục tiêu vào ai đó. Sự thật là, có rất nhiều trường hợp bạn không cần phải tin tưởng tuyệt đối vào máy tính của mình: Rốt cuộc, nó không phải là ngày tận thế nếu ai đó đột nhập và thấy chiếc bánh pizza của tôi được giao. Không ai quan tâm đủ để cố gắng phá vỡ nó.

Nhưng bỏ phiếu không phải là một trong những trường hợp đó.

Cách an toàn duy nhất để bỏ phiếu với máy tính là một cách trong đó một lá phiếu bằng giấy được in trước mặt cử tri, được phê duyệt, và sau đó được lưu trữ trong thùng phiếu.

Bỏ phiếu là một trường hợp mà kết quả của một vụ hack có thể có tác động rất lớn. Việc bỏ phiếu cũng tương đối dễ dàng để nhắm mục tiêu (bạn biết khi nào và nơi nó sẽ xảy ra) và ở đó, một động lực rất mạnh mẽ để thay đổi kết quả. Dễ dàng như tôi có thể thêm mật khẩu của ryaniscool, đó là tôi có thể thay đổi lệnh bổ sung của Cameron, vì vậy, khi nó được kiểm phiếu, nó đã thêm một số tùy chọn cho bữa tiệc mà tôi chọn.

Tôi nên thêm bao nhiêu? Thành thật mà nói, tại thời điểm này, nó hoàn toàn phụ thuộc vào tôi. Do đó kết luận này: bỏ phiếu trực tuyến sẽ không bao giờ an toàn. Bỏ phiếu máy tính sẽ không bao giờ được an toàn.

Cách an toàn duy nhất để bỏ phiếu với máy tính là một cách trong đó một lá phiếu bằng giấy được in trước mặt cử tri, được phê duyệt, và sau đó được lưu trữ trong thùng phiếu. Theo cách đó, nếu ai đó nghĩ rằng các hệ thống máy tính đã bị xâm phạm, nếu có bất kỳ lý do nào để nghi ngờ ai đó đã thêm phiếu bầu không đúng cách thì sẽ có một dấu vết giấy. Nói cách khác, máy tính thêm phiếu bầu là một sự tiện lợi, không có gì hơn. Cuộc bỏ phiếu thực sự, sức mạnh thực sự, vẫn nằm trong lá phiếu.

Không có dấu vết giấy đó, bạn đã tin tưởng vào máy tính.

Và không ai nên tin vào một máy tính.

CẬP NHẬT:

Có một số chủ đề định kỳ trong cuộc thảo luận xung quanh bài tiểu luận này, vì vậy tôi nghĩ rằng tôi đã kết hợp chúng ở đây theo định dạng Q + A! Bài tiểu luận ở trên không bị thay đổi, nhưng tôi nghĩ phần dưới đây có thể hữu ích nếu bạn muốn đọc thêm về chủ đề này!

Q: Bạn có ý nghĩa gì khi bầu chọn máy tính?

Trả lời: Tôi nói về một hệ thống mà bạn độc quyền bầu chọn trên máy tính: không có dấu vết giấy nào được tạo ra. Trong trường hợp này, máy tính là cơ quan thẩm quyền về những gì bạn đã bình chọn: không có nguồn nào khác bạn có thể kiểm tra.

Một cách đạo đức và an toàn hơn để sử dụng máy tính trong bỏ phiếu là sử dụng chúng không phải là quyền hạn, mà là sự tiện lợi. Nếu bạn bỏ phiếu cho một lá phiếu bằng giấy và một máy tính sẽ quét để thêm kết quả, bạn có thể cảm thấy an toàn hơn, bởi vì nếu có bất cứ điều gì sai ở đó, Lôi vẫn còn một vệt giấy vật lý. Nếu bạn bỏ phiếu trên máy tính nhưng sau đó nó sẽ in ra một lá phiếu bằng giấy, mà bạn phải xác nhận là chính xác trước khi bỏ phiếu, thì bạn cũng có thể cảm thấy an toàn hơn, vì trong cả hai tình huống này, máy tính đều tiện lợi. Nó khi máy tính trở thành cơ quan có thẩm quyền phát sinh vấn đề.

Hỏi: Không thể khắc phục điều này bằng cách cho mỗi người bầu một mã bí mật, hoặc một loại khóa nào đó, hoặc có thể chúng tôi có thể quét sinh trắc học bằng mắt hoặc dấu vân tay của họ hoặc một cái gì đó? Hoặc điều gì xảy ra nếu chúng ta sao lưu số phiếu ở đâu đó trên internet lần thứ hai chúng được thực hiện?

A: Không. Mã và khóa có thể bị chặn hoặc sao chép, và bất kỳ máy quét sinh trắc học nào cũng sẽ là máy tính, dễ bị tổn thương với các vấn đề chính xác được thảo luận ở đây. Và bất kỳ hệ thống nối mạng nào - trong đó máy tính chia sẻ nó sẽ bầu chọn cho nó, hãy sao lưu nó lên một nơi khác - một lần nữa phụ thuộc vào việc không bị giả mạo. Lấy làm tiếc.

H: Được rồi, nhưng có lẽ chúng ta có thể kiểm tra các chương trình của mình và xem liệu mã được biên dịch của chúng ta có hoạt động khác với những gì chúng ta mong đợi không?

A: Điều này không hoạt động vì một vài lý do. Chắc chắn, trong giá trị của tôi thay đổi giá trị của những gì 10 + 20 cộng vào ví dụ, thì đó là dễ dàng để kiểm tra và nắm bắt bất kỳ thay đổi nào. Nhưng ngay cả khi bạn nghĩ sẽ kiểm tra điều đó ngay từ đầu - và tại sao bạn lại như vậy? - điều đó vẫn không giải quyết được vấn đề. Mã độc của tôi có thể phát hiện khi nó bị kiểm tra và không làm gì xấu, chỉ hoạt động khi bạn không tìm kiếm.

Âm thanh như scifi, phải không?

Chà, điều đó đã được thực hiện: trong vụ bê bối khí thải của Volkswagen năm 2015, các máy tính trên xe đã phát hiện ra khi khí thải của chúng được kiểm tra và chạy ở chế độ thân thiện với môi trường năng lượng thấp, và chuyển sang chế độ gây ô nhiễm năng lượng cao khi thử nghiệm kết thúc . Các máy tính được phát hiện khi chúng đang được thử nghiệm, hành động theo hành vi tốt nhất của chúng và sau đó dừng lại khi thử nghiệm kết thúc. Vụ bê bối này đã khiến Volkswagen phải trả 18,32 tỷ USD để khắc phục, bằng cách này, không bao gồm khoản tiền phạt 2,8 tỷ USD mà họ đã trả.

Lý do duy nhất mà Volkswagen sẽ làm điều này ngay từ đầu là vì nó đã mang lại lợi nhuận cho họ và họ nghĩ rằng họ sẽ bị bắt. Các ưu đãi tương tự áp dụng cho một cuộc bầu cử.

H: Nếu tôi buộc phải bỏ phiếu trên máy tính, điều đó có nghĩa là tôi không nên bỏ phiếu?

A: Không, bạn hoàn toàn nên bỏ phiếu. Mục đích của việc can thiệp vào một cuộc bầu cử là để tước quyền của bạn. Nếu bạn không bỏ phiếu bầu, bạn sẽ tự tước quyền kinh doanh với hiệu quả 100%. Hãy bỏ phiếu và sau đó, làm những gì bạn cần làm để đảm bảo bạn không bao giờ phải sử dụng bỏ phiếu máy tính nữa.

Q: Điều này có nghĩa là chúng ta không nên tin tưởng vào máy tính cho bất cứ điều gì?

A: Trong một ý nghĩa tuyệt đối: có. Bạn không nên có 100% niềm tin vào bất kỳ hệ thống máy tính nào. Nhưng điều đó rõ ràng là không thực tế và trong hầu hết các trường hợp, bạn không cần phải có 100% niềm tin vào máy tính. Một trong số ít trường hợp bạn sẽ bỏ phiếu. Câu hỏi tiếp theo đi vào chi tiết hơn.

Q: Thôi nào. Chúng tôi làm ngân hàng trực tuyến, hàng tỷ đô la di chuyển kỹ thuật số mỗi ngày và bạn thậm chí đã viết điều này trên máy tính. Chắc chắn bạn là người báo động và / hoặc đạo đức giả?

A: Đây là nơi mà ý tưởng về sự tin tưởng tuyệt đối xuất hiện. Tôi không hoàn toàn tin tưởng vào máy tính, nhưng tôi làm ngân hàng trực tuyến. Nhưng điều đó bởi vì nếu có sự cố xảy ra, ngân hàng có thể sửa nó sau đó. Bạn sử dụng thẻ tín dụng, biết rằng có một cơ hội thông tin của bạn có thể bị đánh cắp - nhưng nếu điều đó xảy ra, bạn tin tưởng công ty thẻ tín dụng sẽ sửa nó. Và họ sẽ - bởi vì lợi nhuận họ kiếm được từ bạn bằng cách sử dụng thẻ của họ hàng ngày bù đắp chi phí cho việc gian lận và phần mềm bị hỏng.

Nhưng có một cách không thể sửa chữa một cuộc bầu cử bị hỏng sau khi thực tế.

Đó là một vấn đề thỏa hiệp: xuất bản trực tuyến này là thuận tiện và tôi đã làm điều đó khi biết rằng lời nói của tôi có thể bị thay đổi. Có một rủi ro mà họ có thể gặp phải - nhưng cuối cùng, đó không phải là ngày tận thế. Cổ phần thấp, và lợi ích lớn hơn những nhược điểm. Tương tự, tôi làm ngân hàng trực tuyến - vì nó cũng thuận tiện và tôi cũng sẵn sàng thỏa hiệp vì tôi biết rằng trong khi có một cơ hội, dữ liệu và / hoặc tiền của tôi có thể bị đánh cắp, tôi cảm thấy tương đối yên tâm rằng ngân hàng sẽ bảo vệ nó. Và vâng, tôi sử dụng máy tính để gửi cho bạn bè 10 đô la để trả lại cho họ bữa tối, nhưng tôi làm điều đó vì tiền đặt cược quá thấp. Nó chỉ 10 đô la.

Cổ phần không thấp khi bỏ phiếu.

Và một hệ thống bầu cử - một nền dân chủ - không phải là thứ bạn muốn thỏa hiệp.

Q: Thế còn blockchain? Bạn nên đề cập đến blockchain. Đó là một công nghệ mới đã tồn tại vào năm 1984 và điều đó chắc chắn có thể giải quyết vấn đề này.

A: Không, không, không. Lấy làm tiếc. Tôi ước nó làm việc quá.

Q: Bạn không biết những gì bạn nói về, và ai là người khiến bạn có thẩm quyền? Tại sao tôi nên tin tưởng bạn?

A: Giống như tôi nói trong bài luận, những ý tưởng ban đầu tuyệt vời này của tôi. Về cơ bản, tôi đã viết lại những gì Ken Thompson đã lập luận vào năm 1984 trong bài viết Refl Refl on Trusting Trust. Đối số Ken Ken thực sự mạnh hơn: ví dụ của anh ta là chương trình đăng nhập, một tương tự được sử dụng trong mọi máy tính. Tôi chỉ nói về việc bỏ phiếu. Bài báo Ken Ken đã đứng như một bài báo chuyên đề về khoa học máy tính trong hơn 30 năm, nhưng nó không nổi tiếng ngoài giới khoa học máy tính. Đó là lý do tại sao tôi muốn viết bài luận này.

(Ngẫu nhiên, có một cách để khắc phục các vấn đề mà Ken nêu ra và tôi đã diễn giải: bạn có thể biên dịch mã của mình hai lần, một lần với trình biên dịch mới và một lần với trình biên dịch nổi tiếng. Nếu bạn so sánh hai kết quả đầu ra và chúng là tương tự, bạn biết trình biên dịch của bạn là tốt. Tất nhiên, điều này đặt ra câu hỏi bạn lấy trình biên dịch nổi tiếng đó từ đâu - đây là một luận án tiến sĩ về chủ đề đó).

Q: Được rồi, chắc chắn điều này khá tệ, nhưng tất cả chỉ là giả thuyết. Chúng tôi sử dụng máy tính để điều khiển lò phản ứng hạt nhân, vì đã khóc rất to. Nếu mọi thứ không an toàn, chúng tôi sẽ biết về nó.

Trả lời: Một cuộc tấn công rất giống với cuộc tấn công được thảo luận ở đây - trong đó bằng chứng về vụ tấn công đã được giấu kín - đã được thực hiện trong cuộc sống thực chỉ vài năm trước, với con sâu Stuxnut vào năm 2010. Và nó đã tấn công - bạn đoán nó - máy ly tâm hạt nhân .

Những cuộc tấn công đã xảy ra. Rất tiếc.

Q: Bầu chọn máy tính có thể xấu, nhưng phiếu bầu cũng có thể bị thay đổi. Họ cũng không hoàn hảo.

A: Hoàn toàn đúng. Nhưng phiếu bầu bằng giấy có một vài lợi thế lớn: nhược điểm của chúng được hiểu rõ (không ai viết bài luận lớn về lý do tại sao giấy của bạn có thể tin cậy được) và lỗ hổng của chúng bị giới hạn trong việc truy cập vật lý.

Nếu tôi muốn gây rối với một cuộc bầu cử bằng giấy, tôi cần phải ăn cắp phiếu bầu, hoặc thay đổi lá phiếu, hoặc bỏ phiếu bầu - dù bằng cách nào, tôi cần quyền truy cập vật lý vào thùng phiếu đó. Và điều đó giới hạn mức độ thiệt hại mà một diễn viên xấu có thể gây ra. Một thiếu niên chán nản cách xa nửa thế giới có thể thực hiện một cuộc bầu cử bỏ phiếu từ tầng hầm của mình. Điều tương tự có thể được nói cho bỏ phiếu máy tính.

Và, trên tất cả những điều này, có một sự thật đơn giản: lập trình viên aren hoàn hảo. Ngay cả khi cuộc tấn công trong bài tiểu luận này được sử dụng, điều đó không có nghĩa là hệ thống bỏ phiếu máy tính của bạn được an toàn. Heck, Google - người mà tôi nghĩ rằng tất cả chúng ta đều có thể đồng ý thuê một số người rất thông minh - có một hệ thống tiền thưởng trong đó họ trả cho bạn tiền mặt nếu bạn giúp họ tìm thấy lỗi trong phần mềm của mình, vì họ không thể đảm bảo họ đã không thực hiện sai lầm.

Lập trình phần mềm là khó. Máy tính thì khó. Ngay cả một nhà phát triển phần mềm tài giỏi, có thiện chí cũng có thể mắc một lỗi duy nhất mở ra toàn bộ ngăn xếp phần mềm để xâm nhập. Lỗi Heartbleed được giới thiệu một cách tình cờ vào năm 2011 - trong phần mềm nguồn mở mà theo lý thuyết, bất kỳ ai trên hành tinh này đều có thể nhìn, kiểm tra và phát hiện - nhưng nó không được tìm thấy cho đến năm 2014, trong đó 17% ​​máy chủ trên internet bây giờ dễ bị tổn thương.

Điều đó đã được thực hiện một cách tình cờ. Hãy tưởng tượng những gì ai đó có thể làm nếu họ đang cố gắng.

Hãy nhìn xem, tôi biết thật tệ khi nghe rằng máy tính bỏ phiếu là xấu. Thật hấp dẫn khi xếp hàng bên ngoài, trong không gian vật lý, khi nó rất dễ hình dung chỉ cần bỏ phiếu cho một ứng dụng trên điện thoại vào giờ nghỉ trưa của bạn và được thực hiện với nó. Nhưng điều quan trọng hơn một cuộc bầu cử là thuận tiện là nó chính xác và trong khi bỏ phiếu bằng máy tính chắc chắn sẽ thuận tiện, tôi hy vọng tôi đã thuyết phục bạn rằng bạn không nên tin vào điều đó là chính xác.

Q: Có xkcd liên quan không?

A: Luôn có một xkcd có liên quan.