<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>blog Archives - Sequent</title>
	<atom:link href="/tag/blog/feed/" rel="self" type="application/rss+xml" />
	<link>/tag/blog/</link>
	<description>Online Voting Platform</description>
	<lastBuildDate>Wed, 29 May 2024 17:03:42 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.5.7</generator>

<image>
	<url>/wp-content/uploads/2022/06/cropped-FAV-6-32x32.png</url>
	<title>blog Archives - Sequent</title>
	<link>/tag/blog/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Blockchains and Bulletin Boards</title>
		<link>/tech/blockchains-and-bulletin-boards/</link>
		
		<dc:creator><![CDATA[Serhii Bohynia]]></dc:creator>
		<pubDate>Mon, 26 Jun 2023 08:21:36 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[blog]]></category>
		<guid isPermaLink="false">/?p=1811</guid>

					<description><![CDATA[<p>Bulletin boards play a vital role in ensuring the integrity and verifiability of cryptographically secure voting systems. Acting as a centralized storage system, the bulletin board serves as a transparent platform where all public information related to the election is openly published, enabling anyone to scrutinise, assess, and audit the process. Go Back Blog Add [&#8230;]</p>
<p>The post <a href="/tech/blockchains-and-bulletin-boards/">Blockchains and Bulletin Boards</a> appeared first on <a href="/">Sequent</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1811" class="elementor elementor-1811" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-6974651 e-flex e-con-boxed e-con e-parent" data-id="6974651" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-6dcc8e3 elementor-widget elementor-widget-text-editor" data-id="6dcc8e3" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
			<style>/*! elementor - v3.21.0 - 26-05-2024 */
.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}</style>				<p>Bulletin boards play a vital role in ensuring the integrity and verifiability of cryptographically secure voting systems. Acting as a centralized storage system, the bulletin board serves as a transparent platform where all public information related to the election is openly published, enabling anyone to scrutinise, assess, and audit the process.</p>						</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-3447a5e0 e-flex e-con-boxed e-con e-parent" data-id="3447a5e0" data-element_type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-5a8969a e-con-full e-flex elementor-invisible e-con e-child" data-id="5a8969a" data-element_type="container" data-settings="{&quot;animation&quot;:&quot;fadeInLeft&quot;}">
				<div class="elementor-element elementor-element-639fd078 elementor-widget elementor-widget-button" data-id="639fd078" data-element_type="widget" data-widget_type="button.default">
				<div class="elementor-widget-container">
					<div class="elementor-button-wrapper">
			<a class="elementor-button elementor-button-link elementor-size-sm" href="/blog/">
						<span class="elementor-button-content-wrapper">
						<span class="elementor-button-icon elementor-align-icon-left">
				<i aria-hidden="true" class="fas fa-angle-left"></i>			</span>
									<span class="elementor-button-text">Go Back</span>
					</span>
					</a>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-4b7e57c1 elementor-widget elementor-widget-heading" data-id="4b7e57c1" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<style>/*! elementor - v3.21.0 - 26-05-2024 */
.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}</style><div class="elementor-heading-title elementor-size-default">Blog</div>		</div>
				</div>
				<div class="elementor-element elementor-element-34a1f97d elementor-widget__width-inherit elementor-widget elementor-widget-theme-post-title elementor-page-title elementor-widget-heading" data-id="34a1f97d" data-element_type="widget" data-widget_type="theme-post-title.default">
				<div class="elementor-widget-container">
			<h1 class="elementor-heading-title elementor-size-default">Blockchains and Bulletin Boards</h1>		</div>
				</div>
				<div class="elementor-element elementor-element-2d99679d elementor-widget elementor-widget-text-editor" data-id="2d99679d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<span>Blog</span>, <span>Technology</span>						</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-ff757c9 e-flex e-con-boxed e-con e-parent" data-id="ff757c9" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-4d1065a4 e-con-full e-flex e-con e-child" data-id="4d1065a4" data-element_type="container">
				<div class="elementor-element elementor-element-7f793013 uael-heading-align-left elementor-widget elementor-widget-uael-table-of-contents" data-id="7f793013" data-element_type="widget" data-settings="{&quot;heading_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;content_between_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:16,&quot;sizes&quot;:[]},&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;],&quot;scroll_offset&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_text_align&quot;:&quot;left&quot;,&quot;heading_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;sticky_offset&quot;:0,&quot;sticky_effects_offset&quot;:0}" data-widget_type="uael-table-of-contents.default">
				<div class="elementor-widget-container">
					<div class="uael-toc-main-wrapper" data-headings="h2,h3" >
			<div class="uael-toc-wrapper">
				<div class="uael-toc-header">
					<span class="uael-toc-heading elementor-inline-editing" data-elementor-setting-key="heading_title" data-elementor-inline-editing-toolbar="basic" ></span>
									</div>
								<div class="uael-toc-toggle-content">
					<div class="uael-toc-content-wrapper">
						
							<ul data-toc-headings="headings" class="uael-toc-list uael-toc-list-none" data-scroll="500" ></ul>
											</div>
				</div>
				<div class="uael-toc-empty-note">
					<span>Add a header to begin generating the table of contents</span>
				</div>
			</div>
					</div>
				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-2c573c8e e-con-full e-flex e-con e-child" data-id="2c573c8e" data-element_type="container">
				<div class="elementor-element elementor-element-3bb061cb elementor-widget elementor-widget-image" data-id="3bb061cb" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
			<style>/*! elementor - v3.21.0 - 26-05-2024 */
.elementor-widget-image{text-align:center}.elementor-widget-image a{display:inline-block}.elementor-widget-image a img[src$=".svg"]{width:48px}.elementor-widget-image img{vertical-align:middle;display:inline-block}</style>										<img fetchpriority="high" decoding="async" width="590" height="271" src="/wp-content/uploads/2024/03/blockchain-img.png" class="attachment-full size-full wp-image-1815" alt="" srcset="/wp-content/uploads/2024/03/blockchain-img.png 590w, /wp-content/uploads/2024/03/blockchain-img-300x138.png 300w" sizes="(max-width: 590px) 100vw, 590px" />													</div>
				</div>
				<div class="elementor-element elementor-element-4584202 elementor-widget elementor-widget-heading" data-id="4584202" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Introduction</h2>		</div>
				</div>
		<div class="elementor-element elementor-element-4180cbb7 e-flex e-con-boxed e-con e-child" data-id="4180cbb7" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-562ecf63 elementor-widget elementor-widget-text-editor" data-id="562ecf63" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Bulletin boards play a vital role in ensuring the integrity and verifiability of cryptographically secure voting systems. Acting as a centralized storage system, the bulletin board serves as a transparent platform where all public information related to the election is openly published, enabling anyone to scrutinise, assess, and audit the process. In the realm of end-to-end verifiable voting systems, the bulletin board becomes even more significant as it holds crucial information required to validate the adherence to established protocols, confirm the accuracy of the reported results, and safeguard against any potential manipulation by administrators or other entities.</p><p>In a typical scenario, the bulletin board acts as a repository for various essential components of a voting system. It securely stores crucial information, including public keys and key generation specifics, records of voting events and encrypted votes, decryption and tally results, and robust mathematical proofs validating the accuracy of these elements. Moreover, the bulletin board assumes the role of an audit ledger, diligently logging significant events and actions, and providing a transparent record that can be accessed and reviewed by anyone seeking to ensure the system’s integrity.</p><p>There are some desirable properties that bulletin boards must have to better meet their objectives:</p>						</div>
				</div>
					</div>
				</div>
				<div class="elementor-element elementor-element-306daba2 elementor-widget elementor-widget-heading" data-id="306daba2" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">1. Distributed
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-e89c4fe elementor-widget elementor-widget-text-editor" data-id="e89c4fe" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>In this way, elections can continue to be conducted despite DDOS attacks. In order to achieve this property, hard problems such as byzantine consensus and distribution engineering challenges must be resolved.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-bae6089 elementor-widget elementor-widget-heading" data-id="bae6089" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">2. Chronological
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-3fc70a95 elementor-widget elementor-widget-text-editor" data-id="3fc70a95" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Logging of events and data on the bulletin board should reflect the order in which they occur.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-9180a64 elementor-widget elementor-widget-heading" data-id="9180a64" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">3. Tamper-Resistant
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-e48f905 elementor-widget elementor-widget-text-editor" data-id="e48f905" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>It should not be possible to manipulate results or remove records from the audit log by altering bulletin board records.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-c153f41 elementor-widget elementor-widget-heading" data-id="c153f41" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">4. Publically Auditable
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-2b14d21 elementor-widget elementor-widget-text-editor" data-id="2b14d21" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Information on bulletin boards should be auditable by anyone. Specifically, this property should be supportive of end-to-end verifiability.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-aab5ce5 elementor-widget elementor-widget-heading" data-id="aab5ce5" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">5. Access Controlled and Authenticated
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-018bb4e elementor-widget elementor-widget-text-editor" data-id="018bb4e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>A bulletin board should include mechanisms for controlling what information can be posted, as well as digital signatures for information and receipts for certification.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-649f6811 elementor-widget elementor-widget-heading" data-id="649f6811" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">In Summary
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-42c5c051 elementor-widget elementor-widget-text-editor" data-id="42c5c051" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Developing a robust bulletin board using blockchain technologies could be a fascinating research project. As well as offering some support for signatures, blockchain technology seems particularly well suited to satisfy distribution, chronology, tamper resistance, and auditing needs. To ensure that the throughput is compatible with voting needs, efficiency considerations regarding the number of “transactions” per second would also need to be considered.</p>						</div>
				</div>
				</div>
					</div>
				</div>
				</div>
		<p>The post <a href="/tech/blockchains-and-bulletin-boards/">Blockchains and Bulletin Boards</a> appeared first on <a href="/">Sequent</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Degree of Privacy in Voting</title>
		<link>/research/degree-of-privacy-in-voting/</link>
		
		<dc:creator><![CDATA[Serhii Bohynia]]></dc:creator>
		<pubDate>Tue, 30 May 2023 08:37:41 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[blog]]></category>
		<guid isPermaLink="false">/?p=1849</guid>

					<description><![CDATA[<p>This article demonstrates the natural extension of Diaz’s 2002 degree of anonymity model to voting scenarios. The outcome is straightforward but holds potential value for intricate cases like weighted voting, where privacy concerns surpass the conventional “bisimilarity-under-swapping” definition outlined by Delaune in 2009. These concerns arise from the possibility of information leakage through election results, [&#8230;]</p>
<p>The post <a href="/research/degree-of-privacy-in-voting/">Degree of Privacy in Voting</a> appeared first on <a href="/">Sequent</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1849" class="elementor elementor-1849" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-6976bde8 e-flex e-con-boxed e-con e-parent" data-id="6976bde8" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-6a1ec063 elementor-widget elementor-widget-text-editor" data-id="6a1ec063" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>This article demonstrates the natural extension of Diaz’s 2002 degree of anonymity model to voting scenarios. The outcome is straightforward but holds potential value for intricate cases like weighted voting, where privacy concerns surpass the conventional “bisimilarity-under-swapping” definition outlined by Delaune in 2009. These concerns arise from the possibility of information leakage through election results, as highlighted in Delaune’s work:</p>						</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-640a2146 e-flex e-con-boxed e-con e-parent" data-id="640a2146" data-element_type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-77a5ffa7 e-con-full e-flex elementor-invisible e-con e-child" data-id="77a5ffa7" data-element_type="container" data-settings="{&quot;animation&quot;:&quot;fadeInLeft&quot;}">
				<div class="elementor-element elementor-element-341d4fd2 elementor-widget elementor-widget-button" data-id="341d4fd2" data-element_type="widget" data-widget_type="button.default">
				<div class="elementor-widget-container">
					<div class="elementor-button-wrapper">
			<a class="elementor-button elementor-button-link elementor-size-sm" href="/blog/">
						<span class="elementor-button-content-wrapper">
						<span class="elementor-button-icon elementor-align-icon-left">
				<i aria-hidden="true" class="fas fa-angle-left"></i>			</span>
									<span class="elementor-button-text">Go Back</span>
					</span>
					</a>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-6473aa36 elementor-widget elementor-widget-heading" data-id="6473aa36" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<div class="elementor-heading-title elementor-size-default">Blog</div>		</div>
				</div>
				<div class="elementor-element elementor-element-1185ce elementor-widget__width-inherit elementor-widget elementor-widget-theme-post-title elementor-page-title elementor-widget-heading" data-id="1185ce" data-element_type="widget" data-widget_type="theme-post-title.default">
				<div class="elementor-widget-container">
			<h1 class="elementor-heading-title elementor-size-default">Degree of Privacy in Voting</h1>		</div>
				</div>
				<div class="elementor-element elementor-element-100c7ccc elementor-widget elementor-widget-text-editor" data-id="100c7ccc" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<span>Blog</span>, <span>Research</span>						</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-6b8518e8 e-flex e-con-boxed e-con e-parent" data-id="6b8518e8" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-3a971c92 e-con-full e-flex e-con e-child" data-id="3a971c92" data-element_type="container">
				<div class="elementor-element elementor-element-1570ae97 uael-heading-align-left elementor-widget elementor-widget-uael-table-of-contents" data-id="1570ae97" data-element_type="widget" data-settings="{&quot;heading_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;content_between_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:16,&quot;sizes&quot;:[]},&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;],&quot;scroll_offset&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_text_align&quot;:&quot;left&quot;,&quot;heading_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;sticky_offset&quot;:0,&quot;sticky_effects_offset&quot;:0}" data-widget_type="uael-table-of-contents.default">
				<div class="elementor-widget-container">
					<div class="uael-toc-main-wrapper" data-headings="h2,h3" >
			<div class="uael-toc-wrapper">
				<div class="uael-toc-header">
					<span class="uael-toc-heading elementor-inline-editing" data-elementor-setting-key="heading_title" data-elementor-inline-editing-toolbar="basic" ></span>
									</div>
								<div class="uael-toc-toggle-content">
					<div class="uael-toc-content-wrapper">
						
							<ul data-toc-headings="headings" class="uael-toc-list uael-toc-list-none" data-scroll="500" ></ul>
											</div>
				</div>
				<div class="uael-toc-empty-note">
					<span>Add a header to begin generating the table of contents</span>
				</div>
			</div>
					</div>
				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-35207229 e-con-full e-flex e-con e-child" data-id="35207229" data-element_type="container">
				<div class="elementor-element elementor-element-21186f27 elementor-widget elementor-widget-image" data-id="21186f27" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img decoding="async" width="768" height="403" src="/wp-content/uploads/2024/03/Sequent-Degree-of-privacy-in-voting-person-phone-768x403-1.png" class="attachment-full size-full wp-image-1850" alt="" srcset="/wp-content/uploads/2024/03/Sequent-Degree-of-privacy-in-voting-person-phone-768x403-1.png 768w, /wp-content/uploads/2024/03/Sequent-Degree-of-privacy-in-voting-person-phone-768x403-1-300x157.png 300w" sizes="(max-width: 768px) 100vw, 768px" />													</div>
				</div>
		<div class="elementor-element elementor-element-7192251b e-flex e-con-boxed e-con e-child" data-id="7192251b" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-1ab238db elementor-widget elementor-widget-text-editor" data-id="1ab238db" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>This article demonstrates the natural extension of Diaz’s 2002 degree of anonymity model to voting scenarios. The outcome is straightforward but holds potential value for intricate cases like weighted voting, where privacy concerns surpass the conventional “bisimilarity-under-swapping” definition outlined by Delaune in 2009. These concerns arise from the possibility of information leakage through election results, as highlighted in Delaune’s work:</p><p>It is important to note that the definition of “bisimilarity-under-swapping” remains resilient even in scenarios where the outcome of the election necessitates the disclosure of votes from VA and VB. This applies to situations such as unanimous voting or when other voters reveal their choices, leading to the deduction of votes for VA and VB.</p><p>The notion that information can potentially leak from voting results directs our attention to the degree of anonymity model. This model, rooted in information theory, enables the quantification of anonymity provided by anonymous connection schemes. It considers attackers who gather probabilistic information about users. Unlike the standard possibilistic privacy definition for voting, the degree of information in this model pertains to probabilistic inference. The measure is not binary; instead, it quantifies the amount of information an attacker can obtain by observing the process. In the context of voting, as discussed later, the attacker acquires information by observing the results, which are accessible regardless of the existence of ballot privacy.</p><p>By quantifying information gain, entropy naturally results (Diaz 2009).</p>						</div>
				</div>
				<div class="elementor-element elementor-element-c06ac86 elementor-widget elementor-widget-image" data-id="c06ac86" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img decoding="async" width="800" height="277" src="/wp-content/uploads/2024/03/1-1024x354.png" class="attachment-large size-large wp-image-1859" alt="" srcset="/wp-content/uploads/2024/03/1-1024x354.png 1024w, /wp-content/uploads/2024/03/1-300x104.png 300w, /wp-content/uploads/2024/03/1-768x266.png 768w, /wp-content/uploads/2024/03/1.png 1179w" sizes="(max-width: 800px) 100vw, 800px" />													</div>
				</div>
				<div class="elementor-element elementor-element-d035ca7 elementor-widget elementor-widget-text-editor" data-id="d035ca7" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>As a measure of degree of anonymity, the authors apply a normalization factor based on maximum entropy (zero information leakage):</p>						</div>
				</div>
				<div class="elementor-element elementor-element-4595dff elementor-widget elementor-widget-image" data-id="4595dff" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="800" height="313" src="/wp-content/uploads/2024/03/2-1024x400.png" class="attachment-large size-large wp-image-1860" alt="" srcset="/wp-content/uploads/2024/03/2-1024x400.png 1024w, /wp-content/uploads/2024/03/2-300x117.png 300w, /wp-content/uploads/2024/03/2-768x300.png 768w, /wp-content/uploads/2024/03/2.png 1180w" sizes="(max-width: 800px) 100vw, 800px" />													</div>
				</div>
				<div class="elementor-element elementor-element-a5dedba elementor-widget elementor-widget-text-editor" data-id="a5dedba" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Given the normalization</p>						</div>
				</div>
				<div class="elementor-element elementor-element-b5c0018 elementor-widget elementor-widget-image" data-id="b5c0018" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="800" height="189" src="/wp-content/uploads/2024/03/3-1024x242.png" class="attachment-large size-large wp-image-1861" alt="" srcset="/wp-content/uploads/2024/03/3-1024x242.png 1024w, /wp-content/uploads/2024/03/3-300x71.png 300w, /wp-content/uploads/2024/03/3-768x181.png 768w, /wp-content/uploads/2024/03/3.png 1156w" sizes="(max-width: 800px) 100vw, 800px" />													</div>
				</div>
					</div>
				</div>
				<div class="elementor-element elementor-element-8c308c1 elementor-widget elementor-widget-heading" data-id="8c308c1" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Extension to Voting
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-777d12c elementor-widget elementor-widget-text-editor" data-id="777d12c" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Using the degree of anonymity model, we can determine who sent a message out of possible groups (the anonymity set). This model should be extended to the case of voting, where the attacker wants to determine the voter’s choice. The availability of individual votes as plaintexts varies depending on the secure voting scheme employed. Consequently, the translation between different scenarios is not instantaneous. In one case, the focus is on determining a single variable out of n options, while in the context of voting, the objective is to ascertain vote choices based on election results.</p><p>However, it is possible to incorporate probabilities directly into the degree of anonymity model. These probabilities should be derived from the election results, as they constitute the publicly available information accessible to the attacker. Furthermore, it is desirable to establish a general approach that does not rely on the specific electoral method or the format of the election result. We start with:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-a5f5846 elementor-widget elementor-widget-image" data-id="a5f5846" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="165" height="63" src="/wp-content/uploads/2024/03/4.png" class="attachment-large size-large wp-image-1866" alt="" />													</div>
				</div>
				<div class="elementor-element elementor-element-d848bc1 elementor-widget elementor-widget-text-editor" data-id="d848bc1" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>These are sets of voters, choices and election results.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-d5798de elementor-widget elementor-widget-image" data-id="d5798de" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="151" height="36" src="/wp-content/uploads/2024/03/5.png" class="attachment-large size-large wp-image-1867" alt="" />													</div>
				</div>
				<div class="elementor-element elementor-element-f67f813 elementor-widget elementor-widget-text-editor" data-id="f67f813" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>The function ‘a’ represents the individual voter’s selection, defined as a mapping that associates each voter with their respective choice. On the other hand, the function ‘t’ denotes the election tally, which maps the set of choices made by voters to the corresponding result.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-a858cd8 elementor-widget elementor-widget-image" data-id="a858cd8" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="247" height="41" src="/wp-content/uploads/2024/03/6.png" class="attachment-large size-large wp-image-1868" alt="" />													</div>
				</div>
				<div class="elementor-element elementor-element-de473ed elementor-widget elementor-widget-text-editor" data-id="de473ed" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Ar corresponds to the set of all functions ‘a’ that generate the outcome ‘r’, representing the sets of selections made by voters. Expanding on this, the function ‘m’ denotes the count of distinct functions ‘a’ in which voter ‘v’ selects choice ‘c’ and the overall result is ‘r’. In essence, it quantifies the number of instances where voter ‘v’ chooses ‘c’ and the final result corresponds to ‘r’.</p><p>These expressions allow us to provide equivalent expressions for the terms in the original definition of degree of anonymity. According to the election result, the entropy corresponding to the uncertainty of a voter’s choice is</p>						</div>
				</div>
				<div class="elementor-element elementor-element-001bea1 elementor-widget elementor-widget-image" data-id="001bea1" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="800" height="141" src="/wp-content/uploads/2024/03/7.png" class="attachment-large size-large wp-image-1869" alt="" srcset="/wp-content/uploads/2024/03/7.png 845w, /wp-content/uploads/2024/03/7-300x53.png 300w, /wp-content/uploads/2024/03/7-768x135.png 768w" sizes="(max-width: 800px) 100vw, 800px" />													</div>
				</div>
				<div class="elementor-element elementor-element-437cf5c elementor-widget elementor-widget-text-editor" data-id="437cf5c" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>In this case, entropy is simply the standard expression for entropy, but with probabilities that correspond to the likelihood that a certain choice will be selected given a certain election result. When there is no information about the election, the maximum entropy corresponds to a uniform probability distribution for the voter’s choice, resulting in</p>						</div>
				</div>
				<div class="elementor-element elementor-element-663def2 elementor-widget elementor-widget-image" data-id="663def2" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="119" height="19" src="/wp-content/uploads/2024/03/8.png" class="attachment-large size-large wp-image-1870" alt="" />													</div>
				</div>
				<div class="elementor-element elementor-element-49e4477 elementor-widget elementor-widget-text-editor" data-id="49e4477" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>where |C| is the number of choices (the cardinality of C). Finally, the degree of privacy is</p>						</div>
				</div>
				<div class="elementor-element elementor-element-77c17b3 elementor-widget elementor-widget-image" data-id="77c17b3" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="110" height="42" src="/wp-content/uploads/2024/03/9.png" class="attachment-large size-large wp-image-1871" alt="" />													</div>
				</div>
				<div class="elementor-element elementor-element-6d6264c elementor-widget elementor-widget-text-editor" data-id="6d6264c" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>which quantifies the degree to which a voter’s v choice remains secret given the election result r. This expression exhibits similarities to the degree of anonymity model, albeit with certain modifications. Firstly, we are addressing the degree of privacy, quantifying the level of knowledge about a voter’s choice, rather than attempting to de-anonymize the sender of a message. Furthermore, this result pertains to each individual voter. While this characteristic may not always be relevant, it holds significance in scenarios involving weighted voting, where voters possess distinct degrees of anonymity. Additionally, it is possible to derive aggregate values, such as the average or minimum degree of anonymity. Another generalization involves computing expectation values over results for a given setup. As an extreme example, in an election with a single voter, the degree of anonymity would always be 0, regardless of the result.</p><p>As mentioned previously, the aforementioned definition applies universally to any election, regardless of the electoral method, result type, or even the design of the ballot. Now, let’s delve into some specific examples to further illustrate this point.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-62a429a elementor-widget elementor-widget-heading" data-id="62a429a" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Examples</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-f4ee792 elementor-widget elementor-widget-text-editor" data-id="f4ee792" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>We calculate values for examples. In all cases we are using a plurality rule for the function t: V =&gt; C =&gt; R.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-9446887 elementor-widget elementor-widget-heading" data-id="9446887" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Yes/No vote, Single voter
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-8932993 elementor-widget elementor-widget-text-editor" data-id="8932993" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>This is a Yes/No vote (ballot options are Yes or No). We have a single voter, John.</p><p>V = { John }, C = { Yes, No }, R = { {Yes:1, No:0}, {Yes:0, No:1} }</p><p>In the following expression:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-1be154c elementor-widget elementor-widget-image" data-id="1be154c" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="800" height="141" src="/wp-content/uploads/2024/03/7.png" class="attachment-large size-large wp-image-1869" alt="" srcset="/wp-content/uploads/2024/03/7.png 845w, /wp-content/uploads/2024/03/7-300x53.png 300w, /wp-content/uploads/2024/03/7-768x135.png 768w" sizes="(max-width: 800px) 100vw, 800px" />													</div>
				</div>
				<div class="elementor-element elementor-element-90d5ff3 elementor-widget elementor-widget-text-editor" data-id="90d5ff3" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>The value of n is 2, for two possible results (the cardinality of C). Consider the case where r = Yes, then</p><p>Ar = { (John, Yes) }, and |Ar| = 1</p><p>since it is the only way that John could have voted. Similarly,</p><p>m(John, Yes, Yes) = 1 and m(John, No, Yes) = 0</p><p>again, for the same reason. The entropy then reduces to</p><p>H(v, r) = 1/1*log(1/1) = 0</p><p>which when plugged into</p>						</div>
				</div>
				<div class="elementor-element elementor-element-e97114f elementor-widget elementor-widget-image" data-id="e97114f" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="110" height="42" src="/wp-content/uploads/2024/03/9.png" class="attachment-large size-large wp-image-1871" alt="" />													</div>
				</div>
				<div class="elementor-element elementor-element-1600a3a elementor-widget elementor-widget-text-editor" data-id="1600a3a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>gives</p><p>d(John, Yes) = d(John, No) = 0</p><p>The degree of anonymity is zero. This matches the obvious fact that in an election with a single voter, their vote will be revealed.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-d2cdd94 elementor-widget elementor-widget-heading" data-id="d2cdd94" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Yes/No vote, Unanimous result</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-11aa454 elementor-widget elementor-widget-text-editor" data-id="11aa454" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>V = { v1 … vn }, C = { Yes, No }, R = { {Yes:n, No:0}, {Yes:0, No:n} }</p><p>In the following expression:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-53a6cf5 elementor-widget elementor-widget-image" data-id="53a6cf5" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="800" height="141" src="/wp-content/uploads/2024/03/7.png" class="attachment-large size-large wp-image-1869" alt="" srcset="/wp-content/uploads/2024/03/7.png 845w, /wp-content/uploads/2024/03/7-300x53.png 300w, /wp-content/uploads/2024/03/7-768x135.png 768w" sizes="(max-width: 800px) 100vw, 800px" />													</div>
				</div>
				<div class="elementor-element elementor-element-5126c40 elementor-widget elementor-widget-text-editor" data-id="5126c40" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>we see that the unanimous vote case has a similar form as the case of a single voter, except for a general number of voters and results:</p><p>|Ar| = 1</p><p>for all r, and also</p><p>m(v, Yes, {Yes:0, No: 10} ) = 0 and m(v, Yes, {Yes:10, No: 0} ) = 1</p><p>which leads to</p><p>d(v, r) = 0</p><p>for all v and r. Once again, this matches the obvious expectation: in a unanimous election, all votes are disclosed.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-75f4ca0 elementor-widget elementor-widget-heading" data-id="75f4ca0" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Yes/No vote, General case
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-a9a0410 elementor-widget elementor-widget-text-editor" data-id="a9a0410" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>V = { v1 … vn }, C = { Yes, No }, R = { {Yes:n, No:0} … {Yes:0, No:n} }</p><p>In this case, the cardinality of R is |C|, as we are not confining the results solely to unanimous outcomes. The calculation for |Ar| and m deviates from the previous approach. By indexing the results in R based on the number of positive votes, we obtain the following:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-a4e1b46 elementor-widget elementor-widget-image" data-id="a4e1b46" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="100" height="45" src="/wp-content/uploads/2024/03/13.png" class="attachment-large size-large wp-image-1878" alt="" />													</div>
				</div>
				<div class="elementor-element elementor-element-87ebbee elementor-widget elementor-widget-text-editor" data-id="87ebbee" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>with a binomial coefficient on the right. This is the number of ways it is possible to obtain the result r. We also have</p>						</div>
				</div>
				<div class="elementor-element elementor-element-57ca209 elementor-widget elementor-widget-image" data-id="57ca209" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="198" height="45" src="/wp-content/uploads/2024/03/14.png" class="attachment-large size-large wp-image-1879" alt="" />													</div>
				</div>
				<div class="elementor-element elementor-element-3859e78 elementor-widget elementor-widget-text-editor" data-id="3859e78" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>dividing the previous two expressions provides</p>						</div>
				</div>
				<div class="elementor-element elementor-element-e60edec elementor-widget elementor-widget-image" data-id="e60edec" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="103" height="53" src="/wp-content/uploads/2024/03/15.png" class="attachment-large size-large wp-image-1880" alt="" />													</div>
				</div>
				<div class="elementor-element elementor-element-bd3294d elementor-widget elementor-widget-text-editor" data-id="bd3294d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Because this is a Yes/No election</p>						</div>
				</div>
				<div class="elementor-element elementor-element-8ea60b6 elementor-widget elementor-widget-image" data-id="8ea60b6" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="222" height="45" src="/wp-content/uploads/2024/03/16.png" class="attachment-large size-large wp-image-1881" alt="" />													</div>
				</div>
				<div class="elementor-element elementor-element-e383ba9 elementor-widget elementor-widget-text-editor" data-id="e383ba9" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>which when divided by |Ar|</p>						</div>
				</div>
				<div class="elementor-element elementor-element-973eae5 elementor-widget elementor-widget-image" data-id="973eae5" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="151" height="58" src="/wp-content/uploads/2024/03/17.png" class="attachment-large size-large wp-image-1882" alt="" />													</div>
				</div>
				<div class="elementor-element elementor-element-e22e790 elementor-widget elementor-widget-text-editor" data-id="e22e790" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>The complete expression for H is therefore</p>						</div>
				</div>
				<div class="elementor-element elementor-element-59400b4 elementor-widget elementor-widget-image" data-id="59400b4" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="800" height="92" src="/wp-content/uploads/2024/03/18-1-1024x118-1.png" class="attachment-large size-large wp-image-1883" alt="" srcset="/wp-content/uploads/2024/03/18-1-1024x118-1.png 1024w, /wp-content/uploads/2024/03/18-1-1024x118-1-300x35.png 300w, /wp-content/uploads/2024/03/18-1-1024x118-1-768x89.png 768w" sizes="(max-width: 800px) 100vw, 800px" />													</div>
				</div>
				<div class="elementor-element elementor-element-2798b15 elementor-widget elementor-widget-text-editor" data-id="2798b15" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>at this point, we can do a couple of sanity checks. Firstly, the probabilities in the entropy expression (r/|C| + 1 — r/|C|) sum to 1. Secondly, these examples highlight a common-sense inference. If an election comprises |C| choices and the number of “Yes” votes is r, then the probability of any voter selecting “Yes” must be r / |C|. Although our generalized approach for calculating entropy is more extensive than our intuition for indistinguishable voters under the plurality rule, it aligns with logical reasoning.</p><p>Finally, the degree of privacy for the general Yes/No election is</p>						</div>
				</div>
				<div class="elementor-element elementor-element-6561ff1 elementor-widget elementor-widget-image" data-id="6561ff1" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="800" height="84" src="/wp-content/uploads/2024/03/19-1024x108-1.png" class="attachment-large size-large wp-image-1887" alt="" srcset="/wp-content/uploads/2024/03/19-1024x108-1.png 1024w, /wp-content/uploads/2024/03/19-1024x108-1-300x32.png 300w, /wp-content/uploads/2024/03/19-1024x108-1-768x81.png 768w" sizes="(max-width: 800px) 100vw, 800px" />													</div>
				</div>
				<div class="elementor-element elementor-element-eb58db2 elementor-widget elementor-widget-text-editor" data-id="eb58db2" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Below is a graph of this function for a fixed value of 10 voters (|C| = 10).</p>						</div>
				</div>
				<div class="elementor-element elementor-element-d59dc55 elementor-widget elementor-widget-image" data-id="d59dc55" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="800" height="386" src="/wp-content/uploads/2024/03/20-1024x494.png" class="attachment-large size-large wp-image-1888" alt="" srcset="/wp-content/uploads/2024/03/20-1024x494.png 1024w, /wp-content/uploads/2024/03/20-300x145.png 300w, /wp-content/uploads/2024/03/20-768x370.png 768w, /wp-content/uploads/2024/03/20.png 1180w" sizes="(max-width: 800px) 100vw, 800px" />													</div>
				</div>
				<div class="elementor-element elementor-element-a22e788 elementor-widget elementor-widget-text-editor" data-id="a22e788" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>As we saw in the previous section, unanimous elections correspond to the two edges of the graph, where d = 0.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-e2a21d0 elementor-widget elementor-widget-heading" data-id="e2a21d0" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Summary</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-6dfe8a4 elementor-widget elementor-widget-text-editor" data-id="6dfe8a4" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>The application of the generalized degree of anonymity model in the context of voting has demonstrated its versatility and relevance. This extension proves applicable to diverse voting methods, providing a flexible approach. Through simple yet illustrative examples, we observe that the model’s calculations align with outcomes derived from traditional methods specific to each type of election. While these initial examples may seem straightforward, the significance of the degree of privacy becomes particularly apparent in more complex scenarios where voters are distinguishable, and results may inadvertently reveal additional information. Weighted voting serves as a prime illustration of such cases. While the definitions presented herein can be equally applied to this scenario, employing them in their general form may require additional considerations to address potential combinatorial challenges.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-6f9004e elementor-widget elementor-widget-heading" data-id="6f9004e" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">References</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-35190be elementor-widget elementor-widget-text-editor" data-id="35190be" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Diaz 2002 — <a href="https://www.esat.kuleuven.be/cosic/publications/article-89.pdf">Towards measuring anonymity</a></p><p>Delaune 2009 — <a href="http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.142.1731&amp;rep=rep1&amp;type=pdf">Verifying privacy-type properties of electronic voting protocols</a></p><p>[3] It is also possible to use a non-uniform prior probability here. In that case the resulting conditional probabilities must be derived in such a way that relative magnitudes are <a href="https://en.wikipedia.org/wiki/Conditional_probability#Formal_derivation">preserved</a>.</p>						</div>
				</div>
				</div>
					</div>
				</div>
				</div>
		<p>The post <a href="/research/degree-of-privacy-in-voting/">Degree of Privacy in Voting</a> appeared first on <a href="/">Sequent</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>A Toy Model of Information – Theoretic Security</title>
		<link>/research/a-toy-model-of-information-theoretic-security/</link>
		
		<dc:creator><![CDATA[Serhii Bohynia]]></dc:creator>
		<pubDate>Fri, 21 Apr 2023 09:20:46 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[blog]]></category>
		<guid isPermaLink="false">/?p=1892</guid>

					<description><![CDATA[<p>In a previous post, we discussed different types of uncertainty due to limited information or computations as the basis for cryptography. A Caesar cipher example demonstrated how an adversary could have all the information to reveal a secret if the relationship between the message space, key space, and ciphertext satisfies the following: Go Back Blog Add a header to [&#8230;]</p>
<p>The post <a href="/research/a-toy-model-of-information-theoretic-security/">A Toy Model of Information – Theoretic Security</a> appeared first on <a href="/">Sequent</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1892" class="elementor elementor-1892" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-13a82ca3 e-flex e-con-boxed e-con e-parent" data-id="13a82ca3" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-72c9ec1a elementor-widget elementor-widget-text-editor" data-id="72c9ec1a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>In a<a href="https://sequentech.io/uncertainty-cryptography-and-information/"> previous post,</a> we discussed different types of uncertainty due to limited information or computations as the basis for cryptography. A <a href="https://en.wikipedia.org/wiki/Caesar_cipher">Caesar cipher </a>example demonstrated how an adversary could have all the information to reveal a secret if the relationship between the message space, key space, and ciphertext satisfies the following:</p>						</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-758f4fe0 e-flex e-con-boxed e-con e-parent" data-id="758f4fe0" data-element_type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-180a39a7 e-con-full e-flex elementor-invisible e-con e-child" data-id="180a39a7" data-element_type="container" data-settings="{&quot;animation&quot;:&quot;fadeInLeft&quot;}">
				<div class="elementor-element elementor-element-241c1b3a elementor-widget elementor-widget-button" data-id="241c1b3a" data-element_type="widget" data-widget_type="button.default">
				<div class="elementor-widget-container">
					<div class="elementor-button-wrapper">
			<a class="elementor-button elementor-button-link elementor-size-sm" href="/blog/">
						<span class="elementor-button-content-wrapper">
						<span class="elementor-button-icon elementor-align-icon-left">
				<i aria-hidden="true" class="fas fa-angle-left"></i>			</span>
									<span class="elementor-button-text">Go Back</span>
					</span>
					</a>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-8ab461e elementor-widget elementor-widget-heading" data-id="8ab461e" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<div class="elementor-heading-title elementor-size-default">Blog</div>		</div>
				</div>
				<div class="elementor-element elementor-element-155b1bb5 elementor-widget__width-inherit elementor-widget elementor-widget-theme-post-title elementor-page-title elementor-widget-heading" data-id="155b1bb5" data-element_type="widget" data-widget_type="theme-post-title.default">
				<div class="elementor-widget-container">
			<h1 class="elementor-heading-title elementor-size-default">A Toy Model of Information – Theoretic Security</h1>		</div>
				</div>
				<div class="elementor-element elementor-element-4d2fdf6d elementor-widget elementor-widget-text-editor" data-id="4d2fdf6d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<span>Blog</span>, <span>Research</span>						</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-22a1a6ca e-flex e-con-boxed e-con e-parent" data-id="22a1a6ca" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-e120712 e-con-full e-flex e-con e-child" data-id="e120712" data-element_type="container">
				<div class="elementor-element elementor-element-4495caa5 uael-heading-align-left elementor-widget elementor-widget-uael-table-of-contents" data-id="4495caa5" data-element_type="widget" data-settings="{&quot;heading_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;content_between_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:16,&quot;sizes&quot;:[]},&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;],&quot;scroll_offset&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_text_align&quot;:&quot;left&quot;,&quot;heading_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;sticky_offset&quot;:0,&quot;sticky_effects_offset&quot;:0}" data-widget_type="uael-table-of-contents.default">
				<div class="elementor-widget-container">
					<div class="uael-toc-main-wrapper" data-headings="h2,h3" >
			<div class="uael-toc-wrapper">
				<div class="uael-toc-header">
					<span class="uael-toc-heading elementor-inline-editing" data-elementor-setting-key="heading_title" data-elementor-inline-editing-toolbar="basic" ></span>
									</div>
								<div class="uael-toc-toggle-content">
					<div class="uael-toc-content-wrapper">
						
							<ul data-toc-headings="headings" class="uael-toc-list uael-toc-list-none" data-scroll="500" ></ul>
											</div>
				</div>
				<div class="uael-toc-empty-note">
					<span>Add a header to begin generating the table of contents</span>
				</div>
			</div>
					</div>
				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-66f2e071 e-con-full e-flex e-con e-child" data-id="66f2e071" data-element_type="container">
				<div class="elementor-element elementor-element-e440051 elementor-widget elementor-widget-image" data-id="e440051" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="768" height="403" src="/wp-content/uploads/2024/03/A-Toy-Model-of-Information-768x403-1.png" class="attachment-full size-full wp-image-1893" alt="" srcset="/wp-content/uploads/2024/03/A-Toy-Model-of-Information-768x403-1.png 768w, /wp-content/uploads/2024/03/A-Toy-Model-of-Information-768x403-1-300x157.png 300w" sizes="(max-width: 768px) 100vw, 768px" />													</div>
				</div>
		<div class="elementor-element elementor-element-63fbdd8d e-flex e-con-boxed e-con e-child" data-id="63fbdd8d" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-680b75b5 elementor-widget elementor-widget-text-editor" data-id="680b75b5" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>In a<a href="https://sequentech.io/uncertainty-cryptography-and-information/"> previous post,</a> we discussed different types of uncertainty due to limited information or computations as the basis for cryptography. A <a href="https://en.wikipedia.org/wiki/Caesar_cipher">Caesar cipher </a>example demonstrated how an adversary could have all the information to reveal a secret if the relationship between the message space, key space, and ciphertext satisfies the following:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-afc8540 elementor-widget elementor-widget-code-highlight" data-id="afc8540" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-html line-numbers">
				<code readonly="true" class="language-html">
					<xmp>ZHOO GRQH BRX KDYH IRXQG WKH VHFUHW YGNN FQPG AQW JCXG HQWPF VJG UGETGV
XFMM EPOF ZPV IBWF GPVOE UIF TFDSFU <strong>WELL DONE YOU HAVE FOUND
THE SECRET</strong> VDKK CNMD XNT GZUD ENTMC SGD RDBQDS UCJJ BMLC WMS
FYTC DMSLB RFC QCAPCR TBII ALKB VLR EXSB CLRKA QEB PBZOBQ</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-a206064 elementor-widget elementor-widget-text-editor" data-id="a206064" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Since none of the other attempts yielded meaningful results, we were able to identify the correct message. Since the number of possible keys is so small, only one of them can decrypt a possible message. In technical terms, the key space and message space[2] are small enough compared to the length of the message that only one key will decrypt.</p><p>The situation can be coarsely be classified into three cases:</p><ol><li aria-level="1"><i>H(K | C) = H(K)</i> — Perfect secrecy</li><li aria-level="1"><i>H(K | C) &lt; H(K)</i> — Information-theoretic security</li><li aria-level="1"><i>H(K | C) = 0</i> — Computational security</li></ol><p>The epistemic uncertainty mentioned in the previous entry is the epistemic uncertainty of information theory. To illustrate how information-theoretic privacy works, we can use a simple model that reduces computation security when conditions are not met.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-2fb73ba1 elementor-widget elementor-widget-heading" data-id="2fb73ba1" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Elements of our model
</h2>		</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-ff49a45 e-con-full e-flex e-con e-child" data-id="ff49a45" data-element_type="container">
				<div class="elementor-element elementor-element-3b74f6f2 elementor-widget elementor-widget-image" data-id="3b74f6f2" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="440" height="321" src="/wp-content/uploads/2024/03/1-1.png" class="attachment-large size-large wp-image-1899" alt="" srcset="/wp-content/uploads/2024/03/1-1.png 440w, /wp-content/uploads/2024/03/1-1-300x219.png 300w" sizes="(max-width: 440px) 100vw, 440px" />													</div>
				</div>
				<div class="elementor-element elementor-element-29453059 elementor-widget elementor-widget-text-editor" data-id="29453059" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>The XOR function</p>						</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-2f8b2c5 elementor-widget elementor-widget-text-editor" data-id="2f8b2c5" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Using a key that determines the exact transformation and allows the intended recipient to recover the secret, our toy model must specify how messages are encrypted from plaintext to ciphertext. We can use a two-character alphabet that consists of binary sequences as messages. As our encryption function, we will use the <a href="https://en.wikipedia.org/wiki/Exclusive_or">XOR</a> function, which produces a third binary sequence from two inputs. By choosing this option, we also fix our key space to be binary sequences. Here’s an example encryption:</p><p>1010011000 XOR 1100111010 = 110100010</p><p>The XOR function produces a ciphertext 110100010 by taking as input a message (1010011000) and a key (1100111010). There is no difference in the process, we can simply imagine that the 1010011000 above is some meaningful content like “WELL DONE YOU FOUND THE SECRET ”. Like in English, in plaintext space (binary sequences) there is a subset of combinations that make meaningful messages, while the rest do not. As a result, we come to the notion of language entropy, which measures how large the meaningful subset of messages is in relation to the entire plaintext space.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-d862257 elementor-widget elementor-widget-image" data-id="d862257" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="300" height="276" src="/wp-content/uploads/2024/03/2-1.png" class="attachment-large size-large wp-image-1900" alt="" />													</div>
				</div>
				<div class="elementor-element elementor-element-559cdde elementor-widget elementor-widget-text-editor" data-id="559cdde" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>As the language entropy increases, the proportion of the blue region in relation to the entire plaintext space also increases. For binary languages, the entropy ranges from 0 to 1, which is measured in bits per character. Currently, our toy model consists of these components:</p><ul><li aria-level="1">Plaintext space: P ∈ {0, 1}n</li><li aria-level="1">Message space: M ⊂ P</li><li aria-level="1">Key space: K ⊂ {0, 1}n</li><li aria-level="1">Ciphertext space: C ∈ {0, 1}n</li><li aria-level="1">Encryption function: XOR: P x K → C</li><li aria-level="1">Language entropy: HL ∈ {0.0-1.0}<br /><br /></li></ul><p>The security characteristics of our system are contingent upon three parameters that are associated with the aforementioned factors:</p><ul><li aria-level="1">n:the number of characters in the plaintext</li><li aria-level="1">|K|: the size of the key space</li><li aria-level="1">HL: the language entropy</li><li aria-level="1">RL = 1 — HL: the language redundancy<br /><br /></li></ul><p>The final parameter, redundancy, is essentially a rephrasing of the language entropy. The equation that formulates the security in relation to these parameters is:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-1a07bf6 elementor-widget elementor-widget-image" data-id="1a07bf6" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="250" height="100" src="/wp-content/uploads/2024/03/3-1.png" class="attachment-large size-large wp-image-1901" alt="" />													</div>
				</div>
				<div class="elementor-element elementor-element-b4fa3f1 elementor-widget elementor-widget-text-editor" data-id="b4fa3f1" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>The given equation provides a minimum estimate for the anticipated quantity of false keys, denoted by the term “sn”. A false key, for a specific ciphertext, is a key that decrypts the ciphertext into a message that is not equivalent to the message that was initially encrypted using the correct key. As illustrated in the initial encryption example mentioned in the post, it was observed that among all the attempted keys used to decrypt the ciphertext, only one produced a coherent plaintext, implying that the ciphertext had no false keys. Conversely, if one of the keys, denoted as “s”, had decrypted the ciphertext into something similar to</p><p>THE MESSAGE COULD BE THIS</p><p>then in such a scenario, the key “s” would be considered a false key. If an attacker were to attempt all possible keys, they would end up with two potential messages, making it challenging to determine the accurate one. As a result, the confidentiality of the secret would be relatively preserved. The presence and quantity of anticipated false keys determine the category to which a cryptosystem belongs among the three general classifications mentioned earlier. Examining the false key equation reveals the following patterns:</p><ul><li aria-level="1">sn increases with the size of the key space, |K|</li><li aria-level="1">sn decreases with the size of the plaintext, n</li><li aria-level="1">sn decreases with language redundancy, RL</li></ul>						</div>
				</div>
				<div class="elementor-element elementor-element-f6ce5ff elementor-widget elementor-widget-heading" data-id="f6ce5ff" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">A visual representation
</h2>		</div>
				</div>
		<div class="elementor-element elementor-element-f1cdff4 e-con-full e-flex e-con e-child" data-id="f1cdff4" data-element_type="container">
				<div class="elementor-element elementor-element-c1f453a elementor-widget elementor-widget-image" data-id="c1f453a" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="590" height="316" src="/wp-content/uploads/2024/03/4-1.png" class="attachment-large size-large wp-image-1902" alt="" srcset="/wp-content/uploads/2024/03/4-1.png 590w, /wp-content/uploads/2024/03/4-1-300x161.png 300w" sizes="(max-width: 590px) 100vw, 590px" />													</div>
				</div>
				<div class="elementor-element elementor-element-5313acc elementor-widget elementor-widget-text-editor" data-id="5313acc" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Encryption representation with n = 2, H = 0.8, M = 3, K = 1</p>						</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-93d7931 elementor-widget elementor-widget-text-editor" data-id="93d7931" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>The image’s left side depicts a visual representation of our parameter values for the toy model, where the left axis denotes the plaintext space, and the right axis represents the ciphertext space. Each point on the graph symbolizes an encryption or a mapping from the plaintext space to the ciphertext space. To obtain the visual representation, we set n = 2, resulting in a plaintext space with four elements. Out of these four, three convey meaningful messages, considering a language entropy of 0.8. Thus, the three red dots on the graph correspond to the three encryptions of these three meaningful messages. Since K=1, each plaintext has only one corresponding ciphertext or, visually, only one point on any given horizontal line. For comparison, see:</p>						</div>
				</div>
		<div class="elementor-element elementor-element-e6739e8 e-con-full e-flex e-con e-child" data-id="e6739e8" data-element_type="container">
				<div class="elementor-element elementor-element-ca6b335 elementor-widget elementor-widget-image" data-id="ca6b335" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
										<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="590" height="319" src="/wp-content/uploads/2024/03/5-1.png" class="attachment-large size-large wp-image-1903" alt="" srcset="/wp-content/uploads/2024/03/5-1.png 590w, /wp-content/uploads/2024/03/5-1-300x162.png 300w" sizes="(max-width: 590px) 100vw, 590px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
							</div>
				</div>
				<div class="elementor-element elementor-element-1fdc566 elementor-widget elementor-widget-text-editor" data-id="1fdc566" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>n = 2, H = 0.8, M = 3, K = 3</p>						</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-c89e77e elementor-widget elementor-widget-text-editor" data-id="c89e77e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Displayed in the image are nine points that correspond to three messages encrypted using three distinct keys. Consequently, each horizontal line on the graph signifies all the encryptions for a specific message under various keys. As for the variance in color, consider the following alternative set of parameters:</p>						</div>
				</div>
		<div class="elementor-element elementor-element-ca885d9 e-con-full e-flex e-con e-child" data-id="ca885d9" data-element_type="container">
				<div class="elementor-element elementor-element-8147eac elementor-widget elementor-widget-image" data-id="8147eac" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
										<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="590" height="387" src="/wp-content/uploads/2024/03/6-1.png" class="attachment-large size-large wp-image-1904" alt="" srcset="/wp-content/uploads/2024/03/6-1.png 590w, /wp-content/uploads/2024/03/6-1-300x197.png 300w" sizes="(max-width: 590px) 100vw, 590px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
							</div>
				</div>
				<div class="elementor-element elementor-element-345134f elementor-widget elementor-widget-text-editor" data-id="345134f" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>n = 6, H = 0.8, M = 28, K = 3</p>						</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-2cb92c9 elementor-widget elementor-widget-text-editor" data-id="2cb92c9" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>If we increase the plaintext length, the number of meaningful messages also increases to 28, resulting in a total of 28 x 3 = 84 encryptions, represented by red and blue points in this particular case. Can you discern the pattern that explains this phenomenon? It may be challenging to identify, but the explanation lies in comprehending the significance of vertical lines in the visual representation. Points that lie on the same horizontal line denote distinct encryptions for the same message, whereas points that are positioned on the same vertical line signify different messages encrypted using the same key. As previously observed, this is precisely the situation where an attacker cannot deduce the secret by attempting all possible keys in reverse, as it is impossible to distinguish the original message among the resulting messages.</p><p>Ciphertexts represented by blue points have more than one key that can decrypt them into a meaningful message. Alternatively, blue points signify ciphertexts that possess one or more spurious keys.</p><p>sn &gt; 0 ⇒ blue point</p><p>sn = 0 ⇒ red point</p><p>We can now visualize the properties of information-theoretic security that we mentioned earlier.</p><ul><li aria-level="1">sn increases with the size of the key space, |K|</li></ul>						</div>
				</div>
		<div class="elementor-element elementor-element-0f00755 e-con-full e-flex e-con e-child" data-id="0f00755" data-element_type="container">
				<div class="elementor-element elementor-element-4f63d46 elementor-widget elementor-widget-image" data-id="4f63d46" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
										<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="590" height="166" src="/wp-content/uploads/2024/03/7-1.png" class="attachment-large size-large wp-image-1908" alt="" srcset="/wp-content/uploads/2024/03/7-1.png 590w, /wp-content/uploads/2024/03/7-1-300x84.png 300w" sizes="(max-width: 590px) 100vw, 590px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
							</div>
				</div>
				<div class="elementor-element elementor-element-4b47ee1 elementor-widget elementor-widget-text-editor" data-id="4b47ee1" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Fixed n, H, increasing values of K</p>						</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-bf6f138 elementor-widget elementor-widget-text-editor" data-id="bf6f138" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>In terms of visualization, the number of red dots proportionally increases.</p><ul><li aria-level="1">sn decreases with language redundancy, RL</li></ul>						</div>
				</div>
		<div class="elementor-element elementor-element-e847b0c e-con-full e-flex e-con e-child" data-id="e847b0c" data-element_type="container">
				<div class="elementor-element elementor-element-0929964 elementor-widget elementor-widget-image" data-id="0929964" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
										<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="590" height="167" src="/wp-content/uploads/2024/03/8-1.png" class="attachment-large size-large wp-image-1909" alt="" srcset="/wp-content/uploads/2024/03/8-1.png 590w, /wp-content/uploads/2024/03/8-1-300x85.png 300w" sizes="(max-width: 590px) 100vw, 590px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
							</div>
				</div>
				<div class="elementor-element elementor-element-6cb1631 elementor-widget elementor-widget-text-editor" data-id="6cb1631" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Fixed K, H, increasing values of n</p>						</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-b566ed5 elementor-widget elementor-widget-text-editor" data-id="b566ed5" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>In terms of visualization, the number of red dots proportionally increases.</p>						</div>
				</div>
		<div class="elementor-element elementor-element-3015178 e-con-full e-flex e-con e-child" data-id="3015178" data-element_type="container">
				<div class="elementor-element elementor-element-139b5d7 elementor-widget elementor-widget-image" data-id="139b5d7" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
										<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="590" height="161" src="/wp-content/uploads/2024/03/9-1.png" class="attachment-large size-large wp-image-1910" alt="" srcset="/wp-content/uploads/2024/03/9-1.png 590w, /wp-content/uploads/2024/03/9-1-300x82.png 300w" sizes="(max-width: 590px) 100vw, 590px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
							</div>
				</div>
				<div class="elementor-element elementor-element-d6552fe elementor-widget elementor-widget-text-editor" data-id="d6552fe" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Fixed n, K, decreasing values of H (increasing values of R)</p>						</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-409597a elementor-widget elementor-widget-heading" data-id="409597a" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Visualizing the categories
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-4e78984 elementor-widget elementor-widget-text-editor" data-id="4e78984" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>In addition to these patterns, we also discussed three general categories that cryptosystems fall into:</p><ul><li aria-level="1"><i>H(K | C) = H(K)</i> — Perfect secrecy</li></ul>						</div>
				</div>
		<div class="elementor-element elementor-element-b21dc27 e-con-full e-flex e-con e-child" data-id="b21dc27" data-element_type="container">
				<div class="elementor-element elementor-element-031a2b0 elementor-widget elementor-widget-image" data-id="031a2b0" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
										<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="590" height="356" src="/wp-content/uploads/2024/03/10.png" class="attachment-large size-large wp-image-1914" alt="" srcset="/wp-content/uploads/2024/03/10.png 590w, /wp-content/uploads/2024/03/10-300x181.png 300w" sizes="(max-width: 590px) 100vw, 590px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
							</div>
				</div>
				<div class="elementor-element elementor-element-d4369cc elementor-widget elementor-widget-text-editor" data-id="d4369cc" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>n = 8, H = 0.55, K = 256</p>						</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-450b085 elementor-widget elementor-widget-text-editor" data-id="450b085" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>In terms of visualization, the number of blue dots per column is equivalent to the number of horizontal lines. This indicates that the adversary cannot extract any information from the ciphertext. It is noteworthy that 2^8 = 256, which corresponds to the value of K.</p><ul><li aria-level="1"><i>H(K | C) &lt; H(K)</i> — Information-theoretic security</li></ul>						</div>
				</div>
		<div class="elementor-element elementor-element-9a555d8 e-con-full e-flex e-con e-child" data-id="9a555d8" data-element_type="container">
				<div class="elementor-element elementor-element-faa6231 elementor-widget elementor-widget-image" data-id="faa6231" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
										<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="590" height="346" src="/wp-content/uploads/2024/03/11.png" class="attachment-large size-large wp-image-1915" alt="" srcset="/wp-content/uploads/2024/03/11.png 590w, /wp-content/uploads/2024/03/11-300x176.png 300w" sizes="(max-width: 590px) 100vw, 590px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
							</div>
				</div>
				<div class="elementor-element elementor-element-e3e00f0 elementor-widget elementor-widget-text-editor" data-id="e3e00f0" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>n = 9, H = 0.55, K = 106</p>						</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-2ccc535 elementor-widget elementor-widget-text-editor" data-id="2ccc535" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>In terms of visualization, only blue dots are present. Each ciphertext is partially secured, implying that the attacker lacks sufficient information to disclose the secret definitively.</p><ul><li aria-level="1"><i>H(K | C) = 0</i> — Computational security</li></ul>						</div>
				</div>
		<div class="elementor-element elementor-element-ce775c6 e-con-full e-flex e-con e-child" data-id="ce775c6" data-element_type="container">
				<div class="elementor-element elementor-element-efcb607 elementor-widget elementor-widget-image" data-id="efcb607" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
										<figure class="wp-caption">
										<img loading="lazy" decoding="async" width="590" height="387" src="/wp-content/uploads/2024/03/12.png" class="attachment-large size-large wp-image-1916" alt="" srcset="/wp-content/uploads/2024/03/12.png 590w, /wp-content/uploads/2024/03/12-300x197.png 300w" sizes="(max-width: 590px) 100vw, 590px" />											<figcaption class="widget-image-caption wp-caption-text"></figcaption>
										</figure>
							</div>
				</div>
				<div class="elementor-element elementor-element-2f0f861 elementor-widget elementor-widget-text-editor" data-id="2f0f861" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>n = 13, H = 0.53, K = 29</p>						</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-d2f7bd7 elementor-widget elementor-widget-text-editor" data-id="d2f7bd7" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>In terms of visualization, there are red dots indicating ciphertexts that do not have information-theoretic protection and rely on computational security for their confidentiality.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-f870199 elementor-widget elementor-widget-heading" data-id="f870199" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Try it yourself.
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-8ff87d8 elementor-widget elementor-widget-text-editor" data-id="8ff87d8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>This post discusses the main concepts presented in Claude Shannon’s <a href="http://netlab.cs.ucla.edu/wiki/files/shannon1949.pdf">Communication Theory of Secrecy Systems</a> published in 1949. Additionally, we have created a toy model to help visualize the security properties of cryptosystems and how they change with the primary parameters. If you’re interested, you can experiment with the model <a href="http://ruescasd.github.io/shannon1949/">here</a>. If you’re a teacher and find it useful, please inform us!</p>						</div>
				</div>
				</div>
					</div>
				</div>
				</div>
		<p>The post <a href="/research/a-toy-model-of-information-theoretic-security/">A Toy Model of Information – Theoretic Security</a> appeared first on <a href="/">Sequent</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Anonymity, Pseudonymity and E-participation</title>
		<link>/research/anonymity-pseudonymity-and-e-participation/</link>
		
		<dc:creator><![CDATA[Serhii Bohynia]]></dc:creator>
		<pubDate>Wed, 29 Mar 2023 10:04:45 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[blog]]></category>
		<guid isPermaLink="false">/?p=1926</guid>

					<description><![CDATA[<p>In this article, we will examine two papers related to the topic of anonymity in e-participation: Ruesch &#38; Märker 2012 – “Making the Case for Anonymity in E-Participation” and Moore 2016 – “Anonymity, Pseudonymity and Deliberation: Why Not Everything Should be Connected.” Our focus is on the concept that there may be an optimal solution [&#8230;]</p>
<p>The post <a href="/research/anonymity-pseudonymity-and-e-participation/">Anonymity, Pseudonymity and E-participation</a> appeared first on <a href="/">Sequent</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1926" class="elementor elementor-1926" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-573a7243 e-flex e-con-boxed e-con e-parent" data-id="573a7243" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-26921d26 elementor-widget elementor-widget-text-editor" data-id="26921d26" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>In this article, we will examine two papers related to the topic of anonymity in e-participation: Ruesch &amp; Märker 2012 – “Making the Case for Anonymity in E-Participation” and Moore 2016 – “Anonymity, Pseudonymity and Deliberation: Why Not Everything Should be Connected.” Our focus is on the concept that there may be an optimal solution in the anonymity spectrum, which strikes a balance between conflicting properties at both ends.</p>						</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-1a4bfd32 e-flex e-con-boxed e-con e-parent" data-id="1a4bfd32" data-element_type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-5ffad172 e-con-full e-flex elementor-invisible e-con e-child" data-id="5ffad172" data-element_type="container" data-settings="{&quot;animation&quot;:&quot;fadeInLeft&quot;}">
				<div class="elementor-element elementor-element-57fc96d5 elementor-widget elementor-widget-button" data-id="57fc96d5" data-element_type="widget" data-widget_type="button.default">
				<div class="elementor-widget-container">
					<div class="elementor-button-wrapper">
			<a class="elementor-button elementor-button-link elementor-size-sm" href="/blog/">
						<span class="elementor-button-content-wrapper">
						<span class="elementor-button-icon elementor-align-icon-left">
				<i aria-hidden="true" class="fas fa-angle-left"></i>			</span>
									<span class="elementor-button-text">Go Back</span>
					</span>
					</a>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-28a68fad elementor-widget elementor-widget-heading" data-id="28a68fad" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<div class="elementor-heading-title elementor-size-default">Blog</div>		</div>
				</div>
				<div class="elementor-element elementor-element-4494bbca elementor-widget__width-inherit elementor-widget elementor-widget-theme-post-title elementor-page-title elementor-widget-heading" data-id="4494bbca" data-element_type="widget" data-widget_type="theme-post-title.default">
				<div class="elementor-widget-container">
			<h1 class="elementor-heading-title elementor-size-default">Anonymity, Pseudonymity and E-participation</h1>		</div>
				</div>
				<div class="elementor-element elementor-element-f8437a3 elementor-widget elementor-widget-text-editor" data-id="f8437a3" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<span>Blog</span>, <span>Research</span>						</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-d3ba9e0 e-flex e-con-boxed e-con e-parent" data-id="d3ba9e0" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-1806cde3 e-con-full e-flex e-con e-child" data-id="1806cde3" data-element_type="container">
				<div class="elementor-element elementor-element-bbf3c1e uael-heading-align-left elementor-widget elementor-widget-uael-table-of-contents" data-id="bbf3c1e" data-element_type="widget" data-settings="{&quot;heading_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;content_between_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:16,&quot;sizes&quot;:[]},&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;],&quot;scroll_offset&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_text_align&quot;:&quot;left&quot;,&quot;heading_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;sticky_offset&quot;:0,&quot;sticky_effects_offset&quot;:0}" data-widget_type="uael-table-of-contents.default">
				<div class="elementor-widget-container">
					<div class="uael-toc-main-wrapper" data-headings="h2,h3" >
			<div class="uael-toc-wrapper">
				<div class="uael-toc-header">
					<span class="uael-toc-heading elementor-inline-editing" data-elementor-setting-key="heading_title" data-elementor-inline-editing-toolbar="basic" ></span>
									</div>
								<div class="uael-toc-toggle-content">
					<div class="uael-toc-content-wrapper">
						
							<ul data-toc-headings="headings" class="uael-toc-list uael-toc-list-none" data-scroll="500" ></ul>
											</div>
				</div>
				<div class="uael-toc-empty-note">
					<span>Add a header to begin generating the table of contents</span>
				</div>
			</div>
					</div>
				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-12270e59 e-con-full e-flex e-con e-child" data-id="12270e59" data-element_type="container">
				<div class="elementor-element elementor-element-54ba002f elementor-widget elementor-widget-image" data-id="54ba002f" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="768" height="403" src="/wp-content/uploads/2024/03/Sequent-Anonymity-Pseudonymity-E-participation-768x403-1.png" class="attachment-full size-full wp-image-1927" alt="" srcset="/wp-content/uploads/2024/03/Sequent-Anonymity-Pseudonymity-E-participation-768x403-1.png 768w, /wp-content/uploads/2024/03/Sequent-Anonymity-Pseudonymity-E-participation-768x403-1-300x157.png 300w" sizes="(max-width: 768px) 100vw, 768px" />													</div>
				</div>
				<div class="elementor-element elementor-element-2848594 elementor-widget elementor-widget-image" data-id="2848594" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="728" height="546" src="/wp-content/uploads/2024/03/real-name-policy-in-eparticipation-3-728.jpg" class="attachment-large size-large wp-image-1933" alt="" srcset="/wp-content/uploads/2024/03/real-name-policy-in-eparticipation-3-728.jpg 728w, /wp-content/uploads/2024/03/real-name-policy-in-eparticipation-3-728-300x225.jpg 300w" sizes="(max-width: 728px) 100vw, 728px" />													</div>
				</div>
		<div class="elementor-element elementor-element-99d16b4 e-flex e-con-boxed e-con e-child" data-id="99d16b4" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-15822c26 elementor-widget elementor-widget-text-editor" data-id="15822c26" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>In this article, we will examine two papers related to the topic of anonymity in e-participation: Ruesch &amp; Märker 2012 – “Making the Case for Anonymity in E-Participation” and Moore 2016 – “Anonymity, Pseudonymity and Deliberation: Why Not Everything Should be Connected.” Our focus is on the concept that there may be an optimal solution in the anonymity spectrum, which strikes a balance between conflicting properties at both ends.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-107d94f elementor-widget elementor-widget-heading" data-id="107d94f" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Advocating for Anonymity in E-Participation
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-625dc64 elementor-widget elementor-widget-text-editor" data-id="625dc64" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>We will examine the points raised in the first paper, which presents an analysis of the participatory budget of the city of Gütersloh in Germany. Although the title may suggest a stance in support of anonymity, it is important to note that the concept of anonymity is not absolute and exists on a spectrum. This spectrum is where the trade-offs between opposing arguments take place. The discussion is relevant to various online platforms such as forums, social networks, and the web in general, and therefore, we will first review general points.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-6b3f708 elementor-widget elementor-widget-heading" data-id="6b3f708" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">General arguments
</h2>		</div>
				</div>
					</div>
				</div>
				<div class="elementor-element elementor-element-3757a8d5 elementor-widget elementor-widget-heading" data-id="3757a8d5" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default"><ul><li>The self-control argument</li></ul></h3>		</div>
				</div>
				<div class="elementor-element elementor-element-9a07db0 elementor-widget elementor-widget-text-editor" data-id="9a07db0" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>There is substantial evidence supporting the argument that anonymous communication often leads to more uncivil discourse, while a real name policy can promote more civilized communication. The ability to be identified by others appears to foster self-restraint, reduce personal attacks, and help establish “communities of trust.”</p>						</div>
				</div>
				<div class="elementor-element elementor-element-f2d9456 elementor-widget elementor-widget-heading" data-id="f2d9456" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default"><ul><li>The legal argument
</li></ul></h3>		</div>
				</div>
				<div class="elementor-element elementor-element-15b40a6 elementor-widget elementor-widget-text-editor" data-id="15b40a6" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Advocates of the real name policy emphasize the significance of having easily identifiable profiles to ensure legal accountability for the actions and language used by internet users.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-b761c81 elementor-widget elementor-widget-heading" data-id="b761c81" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default"><ul><li>The online=offline argument</li></ul></h3>		</div>
				</div>
				<div class="elementor-element elementor-element-b9a4ae9 elementor-widget elementor-widget-text-editor" data-id="b9a4ae9" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>If we are expected to be accountable using our real names in our offline lives, why should we not have the same expectation in our online lives?</p><p>Conversely</p>						</div>
				</div>
				<div class="elementor-element elementor-element-de5fb05 elementor-widget elementor-widget-heading" data-id="de5fb05" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default"><ul><li>The open participation argument</li></ul></h3>		</div>
				</div>
				<div class="elementor-element elementor-element-14dca37 elementor-widget elementor-widget-text-editor" data-id="14dca37" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Requiring users to disclose their real name could lead to the exclusion of many individuals from participating in forums or social networks, particularly in authoritarian regimes where those critical of the government may face repercussions.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-fcdf12c elementor-widget elementor-widget-heading" data-id="fcdf12c" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default"><ul><li>The freedom argument</li></ul></h3>		</div>
				</div>
				<div class="elementor-element elementor-element-bfba82b elementor-widget elementor-widget-text-editor" data-id="bfba82b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Users are more likely to express themselves freely and without being influenced by groupthink when they are not required to disclose their real identity.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-ab6e0d8 elementor-widget elementor-widget-heading" data-id="ab6e0d8" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default"><ul><li>The privacy argument</li></ul></h3>		</div>
				</div>
				<div class="elementor-element elementor-element-6d6a880 elementor-widget elementor-widget-text-editor" data-id="6d6a880" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Users should have the right to choose whether to make certain political or other opinions publicly accessible, especially considering that information once published on the internet can be almost impossible to control.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-dd9fd06 elementor-widget elementor-widget-heading" data-id="dd9fd06" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Arguments specific to E-participation
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-5bb5417 elementor-widget elementor-widget-text-editor" data-id="5bb5417" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Many of the points discussed so far are likely familiar as they relate to observations made in the previous post. However, the focus has mainly been on social networks and unmoderated online forums, leaving the area of e-participation relatively unexplored in regards to anonymity and real name policy. This paper aims to fill that gap by explicitly connecting the “anonymity debate” to e-participation, presenting both pros and cons as rationale and objections, respectively.</p><p>Rationale 1: Requiring a real name policy and personal data can ensure that only eligible citizens participate, thereby improving representativeness and, in turn, legitimacy.</p><p>Rationale 2: Requiring users to disclose their real name and personal data ensures that the quality of dialogue is improved by preventing offensive comments from anonymous users.</p><p>Rationale 3: The following objections challenge the points made in favor of real name policy and the request for personal data in ensuring transparent communication and strengthening democracy:</p><p>Objection 1: The focus on real name policy and request for personal data can detract from discussions centered on issues, leading to a biased perception of messages that degrades the quality of discourse.</p><p>Objection 2: Real name policy and request for personal data infringe upon individuals’ privacy rights.</p><p>Objection 3: Requiring a real name policy and personal data can lead to time-consuming and costly administrative issues.</p><p>Objection 4: Real name policy and request for personal data can lead to negative media attention and public perception due to legal, administrative, and usability problems they cause.</p><p>Objection 5: Requiring real names and personal data may create usability issues that discourage people from participating, ultimately leading to a decrease in overall participation.</p><p>The arguments put forth regarding online discussion and the internet at large share a considerable amount of common ground with those presented in the case of e-participation. Rationale 2 and Objection 1 align with the general arguments for self-control and quality, while Objection 2 corresponds with the broader arguments for open participation and freedom.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-e94b41c elementor-widget elementor-widget-heading" data-id="e94b41c" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Preserving Integrity through Pseudonymity
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-de4308c elementor-widget elementor-widget-text-editor" data-id="de4308c" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Introducing Integrity Preserving Pseudonymity as a Compromise Solution:</p><p>The authors of the paper argue that, based on the Gütersloh experience, the objections to real name policy outweigh the rationales. However, as we mentioned earlier, anonymity is not a black and white issue and there are various compromise solutions between complete anonymity and real name policy. These range from no registration at all to registration with verified personal data.</p><p>One potential solution that could be considered a midpoint is Integrity Preserving Pseudonymity. With this approach, citizens are required to validate their real identities to participate in the platform, but their identities remain private and cannot be linked to their pseudonyms beyond the eligibility requirement.</p><p>This compromise solution allows citizens to maintain a degree of identity by linking their contributions to their pseudonyms, but still ensures their privacy with respect to both the general public and institutional authorities managing the participation process. This strikes a balance between anonymity and real name policy, where identity is stronger than complete anonymity but weaker than real identity.</p><p>Integrity preserving pseudonymity can be established using <a href="https://en.wikipedia.org/wiki/Digital_credential#Anonymous">anonymous credentials</a>, a cryptographic technique introduced by David Chaum (CHA 85). Revisiting the pros and cons of this type of pseudonymity, we can analyze whether the Rationales and Objections support or challenge the use of pseudonymity, as well as the two extremes of pure anonymity and real names. To simplify, we have abbreviated the arguments and merged Objection 4 with Objection 3. The following table summarizes the analysis.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-2d0fdbc elementor-widget elementor-widget-image" data-id="2d0fdbc" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="800" height="351" src="/wp-content/uploads/2024/03/Screenshot-2023-03-29-at-9.53.12-1024x449.png" class="attachment-large size-large wp-image-1937" alt="" srcset="/wp-content/uploads/2024/03/Screenshot-2023-03-29-at-9.53.12-1024x449.png 1024w, /wp-content/uploads/2024/03/Screenshot-2023-03-29-at-9.53.12-300x132.png 300w, /wp-content/uploads/2024/03/Screenshot-2023-03-29-at-9.53.12-768x337.png 768w, /wp-content/uploads/2024/03/Screenshot-2023-03-29-at-9.53.12-1536x674.png 1536w, /wp-content/uploads/2024/03/Screenshot-2023-03-29-at-9.53.12.png 1546w" sizes="(max-width: 800px) 100vw, 800px" />													</div>
				</div>
				<div class="elementor-element elementor-element-4285692 elementor-widget elementor-widget-text-editor" data-id="4285692" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>The cells in the table are marked with a check (√) or an X depending on whether the argument supports or questions the use of pseudonymity. Cases where the argument has both positive and negative aspects with respect to the policy are marked with both symbols. Here is a summary of the arguments for pseudonymity.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-496c73a elementor-widget elementor-widget-heading" data-id="496c73a" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default"><ul><li>Legitimacy, integrity
</li></ul></h3>		</div>
				</div>
				<div class="elementor-element elementor-element-f26ebbc elementor-widget elementor-widget-text-editor" data-id="f26ebbc" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Integrity preserving pseudonymity guarantees that only eligible citizens can participate while maintaining integrity.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-de56230 elementor-widget elementor-widget-heading" data-id="de56230" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default"><ul><li> Civility</li></ul></h3>		</div>
				</div>
				<div class="elementor-element elementor-element-4c27e54 elementor-widget elementor-widget-text-editor" data-id="4c27e54" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Pseudonymity has characteristics of both real name policy and anonymity. On one hand, since participants are not fully identifiable, there is some possibility for uncivil behavior, which may pose a challenge for accountability. However, on the other hand, pseudonymity does offer a degree of identity through linking contributions to a particular citizen, allowing for a level of accountability. While this level of accountability is not as strong as that offered by real names, it is greater than that provided by pure anonymity.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-638d20c elementor-widget elementor-widget-heading" data-id="638d20c" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default"><ul><li>Communication transparency</li></ul></h3>		</div>
				</div>
				<div class="elementor-element elementor-element-889a9a4 elementor-widget elementor-widget-text-editor" data-id="889a9a4" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>According to the definition in the paper, the argument against pseudonymity based on the fact that citizens do not know the real person they are communicating with is considered negative. However, it is possible to make points similar to those made for civility in this context.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-44e8864 elementor-widget elementor-widget-heading" data-id="44e8864" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default"><ul><li>Issue-centric debate</li></ul></h3>		</div>
				</div>
				<div class="elementor-element elementor-element-73e4fa2 elementor-widget elementor-widget-text-editor" data-id="73e4fa2" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>This argument is equivocal for the same reasons as described for Civility. The presence of some degree of identity may divert from a purely issue-focused discussion, similar to what happens with pure anonymity.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-14be847 elementor-widget elementor-widget-heading" data-id="14be847" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default"><ul><li>Privacy, inclusion, freedom</li></ul></h3>		</div>
				</div>
				<div class="elementor-element elementor-element-384a8c5 elementor-widget elementor-widget-text-editor" data-id="384a8c5" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Integrity preserving pseudonymity, by definition, protects citizens’ real identities, which in turn promotes inclusion and freedom.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-e401f88 elementor-widget elementor-widget-heading" data-id="e401f88" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default"><ul><li>Administrative complexity</li></ul></h3>		</div>
				</div>
				<div class="elementor-element elementor-element-843d6e0 elementor-widget elementor-widget-text-editor" data-id="843d6e0" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Implementing pseudonymity involves citizen authentication using their real name and other personal information, resulting in similar complexity issues to those of a pure real name policy. Furthermore, pseudonymity requires a meticulous implementation with proper cryptography, leading to administrative complexity and associated costs.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-038ea0e elementor-widget elementor-widget-heading" data-id="038ea0e" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default"><ul><li>Usability and participation
</li></ul></h3>		</div>
				</div>
				<div class="elementor-element elementor-element-22f101b elementor-widget elementor-widget-text-editor" data-id="22f101b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>This argument presents a mixed evaluation for pseudonymity. On one hand, the real name authentication required for pseudonymity may result in complexity issues similar to those for a pure real name policy, decreasing usability and participation. On the other hand, pseudonymity offers some advantages for increasing participation, while still protecting citizens’ real identity, which aligns with the Privacy-inclusion-freedom argument.</p><p>The overall evaluation of a pseudonymity policy should consider the relative importance of each argument, rather than simply counting the pros and cons. Pseudonymity can function as an optimal balance between maintaining important properties of pure anonymity and ameliorating its drawbacks. However, the level of identity present in pseudonymity does pose a greater threat to Privacy-integrity-freedom than pure anonymity if <a href="https://en.wikipedia.org/wiki/Inference_attack">inference attacks</a> are conducted on pseudonyms’ linkable contributions. The paper suggests that negative effects of anonymity can be accounted for by the use of pseudonyms and moderation, and that real name policy should be avoided in e-participation projects.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-43d5de8 elementor-widget elementor-widget-heading" data-id="43d5de8" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Summary</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-a1e198a elementor-widget elementor-widget-text-editor" data-id="a1e198a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>In Ruesch &amp; Märker’s 2012 paper, we examined arguments both for and against anonymity in general and specifically in the context of e-participation. We noted that anonymity exists on a spectrum and that integrity preserving pseudonymity falls somewhere in between complete anonymity and full identification. We then assessed pseudonymity based on the arguments presented and suggested that, depending on the importance of each argument, it could be an effective compromise that balances conflicting requirements in e-participation systems. [36]</p>						</div>
				</div>
				<div class="elementor-element elementor-element-c4123df elementor-widget elementor-widget-heading" data-id="c4123df" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">References</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-12fef7e elementor-widget elementor-widget-text-editor" data-id="12fef7e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>(Chaum 85) — Chaum, David (October 1985). “Security without identification: transaction systems to make big brother obsolete”.</p><p>(Ruesch &amp; Märker 2012) — Making the Case for Anonymity in E-Participation</p><p>[20] De Cindio, Fiorella. 2012. “Guidelines for Designing Deliberative Digital Habitats: Learning from E-Participation for Open Data Initiatives.” The Journal of Community Informatics 8 (2).</p><p>[21] Fredheim, Rolf, Alfred Moore, and John Naughton. n.d. “Anonymity and Online Commenting: An Empirical Study.” SSRN Electronic Journal. doi:10.2139/ssrn.2591299.</p><p>[22] Cho, Daegon, and Alessandro Acquisti. 2013. “The More Social Cues, The Less Trolling? An Empirical Study of Online Commenting Behavior.”</p><p>[23] Diakopoulos, Nicholas, and Mor Naaman. 2011. “Towards Quality Discourse in Online News Comments.” In Proceedings of the ACM 2011 Conference on Computer Supported Cooperative Work — CSCW ‘11. doi:10.1145/1958824.1958844.</p><p>[25] Fredheim, Rolf, Alfred Moore, and John Naughton. n.d. “Anonymity and Online Commenting: An Empirical Study.” SSRN Electronic Journal. doi:10.2139/ssrn.2591299.</p><p>[26] Davies, Todd. 2009. Online Deliberation: Design, Research, and Practice. Stanford Univ Center for the Study.</p><p>[29] Connolly, Terry, Leonard M. Jessup, and Joseph S. Valacich. 1990. “Effects of Anonymity and Evaluative Tone on Idea Generation in Computer-Mediated Groups.” Management Science 36 (6): 689—703.</p><p>[30] Flanagin, A. J., V. Tiyaamornwong, J. O’Connor, and D. R. Seibold. 2002. “Computer-Mediated Group Work: The Interaction of Sex and Anonymity.” Communication Research 29 (1): 66—93.</p>						</div>
				</div>
				</div>
					</div>
				</div>
				</div>
		<p>The post <a href="/research/anonymity-pseudonymity-and-e-participation/">Anonymity, Pseudonymity and E-participation</a> appeared first on <a href="/">Sequent</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>A bag of Dev Container Tricks</title>
		<link>/tech/a-bag-of-dev-container-tricks/</link>
		
		<dc:creator><![CDATA[Serhii Bohynia]]></dc:creator>
		<pubDate>Fri, 03 Mar 2023 11:03:15 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[blog]]></category>
		<guid isPermaLink="false">/?p=1941</guid>

					<description><![CDATA[<p>Nowadays, threre are a lot of tools, libraries, IDEs &#38; plugins that are supposed to make the life of developers easier. But this also adds complexity. Moreover, it may make each developer’s development environment a bit different, depending on how the developer configured these tools. Go Back Blog Add a header to begin generating the [&#8230;]</p>
<p>The post <a href="/tech/a-bag-of-dev-container-tricks/">A bag of Dev Container Tricks</a> appeared first on <a href="/">Sequent</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1941" class="elementor elementor-1941" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-5b274f6d e-flex e-con-boxed e-con e-parent" data-id="5b274f6d" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-7033392d elementor-widget elementor-widget-text-editor" data-id="7033392d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Nowadays, threre are a lot of tools, libraries, IDEs &amp; plugins that are supposed to make the life of developers easier. But this also adds complexity. Moreover, it may make each developer’s development environment a bit different, depending on how the developer configured these tools.</p>						</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-379b0e e-flex e-con-boxed e-con e-parent" data-id="379b0e" data-element_type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-64dc1476 e-con-full e-flex elementor-invisible e-con e-child" data-id="64dc1476" data-element_type="container" data-settings="{&quot;animation&quot;:&quot;fadeInLeft&quot;}">
				<div class="elementor-element elementor-element-4ffae7cb elementor-widget elementor-widget-button" data-id="4ffae7cb" data-element_type="widget" data-widget_type="button.default">
				<div class="elementor-widget-container">
					<div class="elementor-button-wrapper">
			<a class="elementor-button elementor-button-link elementor-size-sm" href="/blog/">
						<span class="elementor-button-content-wrapper">
						<span class="elementor-button-icon elementor-align-icon-left">
				<i aria-hidden="true" class="fas fa-angle-left"></i>			</span>
									<span class="elementor-button-text">Go Back</span>
					</span>
					</a>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-36bff9a8 elementor-widget elementor-widget-heading" data-id="36bff9a8" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<div class="elementor-heading-title elementor-size-default">Blog</div>		</div>
				</div>
				<div class="elementor-element elementor-element-41dd07d0 elementor-widget__width-inherit elementor-widget elementor-widget-theme-post-title elementor-page-title elementor-widget-heading" data-id="41dd07d0" data-element_type="widget" data-widget_type="theme-post-title.default">
				<div class="elementor-widget-container">
			<h1 class="elementor-heading-title elementor-size-default">A bag of Dev Container Tricks</h1>		</div>
				</div>
				<div class="elementor-element elementor-element-37a74cd0 elementor-widget elementor-widget-text-editor" data-id="37a74cd0" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<span>Blog</span>, <span>Technology</span>						</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-7912d8b2 e-flex e-con-boxed e-con e-parent" data-id="7912d8b2" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-4ade4524 e-con-full e-flex e-con e-child" data-id="4ade4524" data-element_type="container">
				<div class="elementor-element elementor-element-555c9877 uael-heading-align-left elementor-widget elementor-widget-uael-table-of-contents" data-id="555c9877" data-element_type="widget" data-settings="{&quot;heading_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;content_between_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:16,&quot;sizes&quot;:[]},&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;],&quot;scroll_offset&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_text_align&quot;:&quot;left&quot;,&quot;heading_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;sticky_offset&quot;:0,&quot;sticky_effects_offset&quot;:0}" data-widget_type="uael-table-of-contents.default">
				<div class="elementor-widget-container">
					<div class="uael-toc-main-wrapper" data-headings="h2,h3" >
			<div class="uael-toc-wrapper">
				<div class="uael-toc-header">
					<span class="uael-toc-heading elementor-inline-editing" data-elementor-setting-key="heading_title" data-elementor-inline-editing-toolbar="basic" ></span>
									</div>
								<div class="uael-toc-toggle-content">
					<div class="uael-toc-content-wrapper">
						
							<ul data-toc-headings="headings" class="uael-toc-list uael-toc-list-none" data-scroll="500" ></ul>
											</div>
				</div>
				<div class="uael-toc-empty-note">
					<span>Add a header to begin generating the table of contents</span>
				</div>
			</div>
					</div>
				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-4138b184 e-con-full e-flex e-con e-child" data-id="4138b184" data-element_type="container">
				<div class="elementor-element elementor-element-63d6b307 elementor-widget elementor-widget-image" data-id="63d6b307" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="768" height="403" src="/wp-content/uploads/2024/03/a-bag-of-dev-container-tricks-768x403-1.png" class="attachment-full size-full wp-image-1942" alt="" srcset="/wp-content/uploads/2024/03/a-bag-of-dev-container-tricks-768x403-1.png 768w, /wp-content/uploads/2024/03/a-bag-of-dev-container-tricks-768x403-1-300x157.png 300w" sizes="(max-width: 768px) 100vw, 768px" />													</div>
				</div>
		<div class="elementor-element elementor-element-3a2c9086 e-flex e-con-boxed e-con e-child" data-id="3a2c9086" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-53ab8225 elementor-widget elementor-widget-text-editor" data-id="53ab8225" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p dir="auto">Nowadays, threre are a lot of tools, libraries, IDEs &amp; plugins that are supposed to make the life of developers easier. But this also adds complexity. Moreover, it may make each developer’s development environment a bit different, depending on how the developer configured these tools.</p><p dir="auto"><a href="https://containers.dev/" rel="nofollow">Dev Containers</a> are yet another one of those tools, but they’re one of the most promising projects to solve this issue. Rather than configuring your local environment and fighting against your local machine configuration and needs, you can crowdsource them.</p><p dir="auto">With Dev Containers, any developer can improve the configuration of their development environment. The whole development environment is code: programmable, reproducible, and outsourceable.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-187f49f elementor-widget elementor-widget-heading" data-id="187f49f" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Drifting hidden state
</h2>		</div>
				</div>
					</div>
				</div>
				<div class="elementor-element elementor-element-15d3fcd elementor-widget elementor-widget-text-editor" data-id="15d3fcd" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p dir="auto">Traditionally, you have a long-term personal investment in your development environment. Since it’s only for you and you configured it manually, you don’t really want to touch it or invest time on it – it’d be time wasted! As project and tool complexity has increased, it has only gotten worse.</p><p dir="auto">After some time, you update your Operating System. A new version of Rust is now required for this project and you have to install it. VS Code tells you that there’s a new release, just restart it to apply. The project you are developing now requires newer PostgreSQL installation. You keep being forced to adapt locally to all these changes to maintain a working development environment. And you spend as little as possible on this adaptation, since it’s time wasted.</p><p dir="auto">Sometimes one of these changes starts giving you headaches. You upgraded PostgreSQL for project A, but then Project B stopped working. Or you upgraded your OS and a library is not found. You get the idea.</p><p dir="auto">You end up having an ever-changing, undocumented, unreproducible hidden state. You fear the day in which your computer fails and you will have to set up all this again from zero. With no extra benefit, having to spend maybe a whole day just to get things to a state you already had.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-0df8f2b elementor-widget elementor-widget-heading" data-id="0df8f2b" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Solve all the above
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-4fdd4309 elementor-widget elementor-widget-text-editor" data-id="4fdd4309" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p dir="auto">Dev Containers is not the only tool that tries to solve the hidden state problem. Nix or virtualenv also try to ameliorate it. But it’s a promising approach because it’s quite comprehensive. More than it looks at first-glance.</p><p dir="auto">However, like any new technology, Dev Containers have their own peculiarities. What follows is a bag of tricks and tips of our own, in no particular order:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-4d84355 elementor-widget elementor-widget-heading" data-id="4d84355" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Trick #1: Remote containers
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-6697165a elementor-widget elementor-widget-text-editor" data-id="6697165a" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p dir="auto">Dev Containers run the software in a container – you already knew that. This can consume some more resources (RAM and CPU) and make compilation and other processes slower than just running all those natively in your PC.</p><p dir="auto">The above is true only if you don’t take advantage of what containers allow. For example, maybe you have a slim or old laptop with little resources, but you have a badass server at home where you can run the containers. You can easily <a href="https://code.visualstudio.com/remote/advancedcontainers/develop-remote-host" rel="nofollow">run the docker containers remotely</a> in that server. Suddenly, your computer is a simple thin client with little need for extra resources. You can compile, rebuild, and launch services within VS Code and your laptop’s CPU and RAM usage won’t suffer.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-1b8ed885 elementor-widget elementor-widget-heading" data-id="1b8ed885" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Trick #2: Github Codespaces
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-388bc063 elementor-widget elementor-widget-text-editor" data-id="388bc063" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p dir="auto">Trick #1 above is fine but requires:</p><ol dir="auto"><li>Having a secondary machine with spare resources.</li><li>Configuring this machine to be a remote docker host.</li></ol><p dir="auto">If you don’t have (1) or if you are just lazy to do (2) like I am, then I’ve got a better alternative for you: <a href="https://docs.github.com/en/codespaces">Github Codespaces</a>. It allows you to do pretty much the same, except the containers are going to be run automatically by Github in Microsoft Azure cloud. For personal accounts, this includes currently <a href="https://docs.github.com/en/billing/managing-billing-for-github-codespaces/about-billing-for-github-codespaces#monthly-included-storage-and-core-hours-for-personal-accounts">60 free hours per month</a>, which is not too shabby.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-a4d7501 elementor-widget elementor-widget-heading" data-id="a4d7501" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Trick #3: Prebuilds for Github Codespaces</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-7b8cbada elementor-widget elementor-widget-text-editor" data-id="7b8cbada" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p dir="auto">You can configure the Dev Container to execute a command with <code>onCreateCommand</code> when the container is created, for example configuring and building your source code and fetching all the dependencies. However, building the docker images and performing from scratch all those steps each time you spin a new Dev container environment can take a while, sometimes even more than 20 minutes or more. That is NOT good. You don’t want to wait half an hour just to start coding!</p><p dir="auto">Github has you covered here. <a href="https://docs.github.com/en/codespaces/prebuilding-your-codespaces/about-github-codespaces-prebuilds">prebuilds to the rescue</a>. Prebuilds help to speed up the creation of new codespaces by performing these expenses steps and generating a ready-to-use Dev container image when you push changes to your repository. Bottom line is: instead of 30 minutes to spin a new codespace, now it’s maybe a minute and your code is freshly already compiled and ready to go. Feels like magic in comparison.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-c475fd3 elementor-widget elementor-widget-heading" data-id="c475fd3" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Trick #4: nix-devcontainer</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-64e5644e elementor-widget elementor-widget-text-editor" data-id="64e5644e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p dir="auto">Nix makes builds reproducible and thus safer, so we wanted to use it as a package manager. Unfortunately, some vscode extensions do not integrate well with Nix. To workaround this issue, we use <a href="https://github.com/xtruder/nix-devcontainer">xtruder/nix-devcontainer</a> which applies a <em>hack</em> that fixes it by preloading a given set of extensions, for example <a href="https://marketplace.visualstudio.com/items?itemName=arrterian.nix-env-selector" rel="nofollow">arrterian.nix-env-selector</a>, before any other.</p><p dir="auto">Without this, you would otherwise have to for example install rust toolchain twice: one with nix for your flake, and another via apt-get for VS Code to work properly. Not anymore!</p>						</div>
				</div>
				<div class="elementor-element elementor-element-5c61c00 elementor-widget elementor-widget-heading" data-id="5c61c00" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Trick #5: Leveraging Cachix
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-7343531e elementor-widget elementor-widget-text-editor" data-id="7343531e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<div class="elementor-element elementor-element-fa3ef44 elementor-widget elementor-widget-text-editor" data-id="fa3ef44" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><p dir="auto"><a href="https://cachix.org/" rel="nofollow">cachix</a> is the most-well known online service cache for Nix. We use it in Github Actions to speed them up and we use it also in the prebuilds mentioned earlier, so that the prebuild process happens faster.</p><p dir="auto">Within the <a href="https://nixos.wiki/wiki/Flakes" rel="nofollow">flake.nix</a> of your package, you can use <a href="https://nixos.wiki/wiki/Flakes#Flake_schema" rel="nofollow">nixConfig</a> to setup access to your public nix cache for any user to take advantage of, <a href="https://github.com/sequentech/bulletin-board/blob/main/flake.nix#L130">just like we do here</a>:</p></div></div>						</div>
				</div>
				<div class="elementor-element elementor-element-d8bb254 elementor-widget elementor-widget-code-highlight" data-id="d8bb254" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>{
  # ...
  nixConfig = {
    extra-substituters = [ "https://sequentech.cachix.org/" ];
    extra-trusted-public-keys = [ "sequentech.cachix.org-1:mmoak2RFNZkQjHHpKn/NbsBrznWqvq8COKqaVOI6ahM=" ];
  };
}</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-174ed1f elementor-widget elementor-widget-text-editor" data-id="174ed1f" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<div class="elementor-element elementor-element-fa3ef44 elementor-widget elementor-widget-text-editor" data-id="fa3ef44" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="highlight highlight-source-nix" dir="auto"><p>Now when a user runs <code>nix develop</code>, it will launch the flake’s default <code>devShell</code> but instead of building everything from scratch, it will have read access to the same nix cache as everyone else.</p><p><strong>However</strong>, it will be first asked to trust this third-party cache. And this is a nice security feature, but might be annoying for example when running commands within the <code>nix develop</code> environment in the prebuild setup script. To fix this, you can either:</p></div><p dir="auto">a) Run any Nix command with an extra <code>--accept-flake-config</code> parameter. </p><p dir="auto">b) Configure your Dockerfile to do that by default as we do in <a href="https://github.com/sequentech/bulletin-board/blob/main/.devcontainer/Dockerfile#L6">Dockerfile</a> and <a href="https://github.com/sequentech/bulletin-board/blob/main/.devcontainer/etc/nix.conf#L6">nix.conf</a>.</p><p dir="auto">Another way to leverage Cachix in Rust projects is to use <a href="https://crane.dev/" rel="nofollow">crane</a>. The beauty of crane is that it allows you to build your rust dependencies just once and then lint, build, and test changes to your project without slowing down. This is something more related to Github Actions, but you might also take advantage of this in the prebuild process within the Dev Container.</p></div></div>						</div>
				</div>
				<div class="elementor-element elementor-element-20b5c03 elementor-widget elementor-widget-heading" data-id="20b5c03" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Trick #6: Leverage the power of vscode
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-d3e4697 elementor-widget elementor-widget-text-editor" data-id="d3e4697" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<div class="elementor-element elementor-element-fa3ef44 elementor-widget elementor-widget-text-editor" data-id="fa3ef44" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="highlight highlight-source-nix" dir="auto"><p dir="auto">You can use all kinds of VS Code stuff within Dev Containers, and everyone will benefit from the time each other spends in having a top-notch development environment configuration. It’s multiplicative. Here are some examples:</p><ul dir="auto"><li>You can configure the editor settings in <code>.vscode/settings.json</code>. If your project is using 80 character lines, maybe you want to add a ruler with <code>"editor.rulers": [80],</code>. This makes the policy clear for the whole development team.</li><li>You can <a href="https://github.com/sequentech/bulletin-board/blob/main/.devcontainer/devcontainer.json#L27">setup preinstalled vscode extensions in <code>.devcontainer/devcontainer.json</code></a>.</li><li>You can configure your project <a href="https://github.com/sequentech/bulletin-board/blob/main/.vscode/launch.json">debugging settings in <code>.vscode/launch.json</code></a>.</li><li>You can configure some <a href="https://code.visualstudio.com/docs/editor/tasks" rel="nofollow">typical tasks</a> like running the unit tests, running the server backend or applying the linter with <a href="https://github.com/sequentech/bulletin-board/blob/main/.vscode/tasks.json"><code>.vscode/tasks.json</code></a>.</li></ul><p dir="auto">As we said earlier: anyone can improve the development environment configuration and everyone benefits. </p></div></div></div>						</div>
				</div>
				<div class="elementor-element elementor-element-b728c97 elementor-widget elementor-widget-heading" data-id="b728c97" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Trick #7: Going multi-repo
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-c9dbdb0 elementor-widget elementor-widget-text-editor" data-id="c9dbdb0" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<div class="elementor-element elementor-element-fa3ef44 elementor-widget elementor-widget-text-editor" data-id="fa3ef44" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="highlight highlight-source-nix" dir="auto"><div class="elementor-element elementor-element-ce09b10 elementor-widget elementor-widget-text-editor" data-id="ce09b10" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><p dir="auto">Google famously uses a single <a href="https://en.wikipedia.org/wiki/Monorepo" rel="nofollow">monorepo architecture</a>. However, in open source typically you don’t. Typically you have multiple repositories to make it easy to let other people collaborate and reuse specific projects. Sequent Voting Platform is open source not only by license but we also buy the philosophy of collaboration, so we are multi-repo.</p><p dir="auto">However, it can be challenging to manage multiple repositories during development. For example, recently I was developing the <a href="https://github.com/sequentech/bulletin-board">bulletin-board</a> using Dev Containers and I needed, for this feature I was coding, to also apply some minor code changes to one of the dependencies of the bulletin-board, <a href="https://github.com/sequentech/strand">strand</a>.</p><p dir="auto">Should I spin two different codespaces for that? What if I need to touch code in multiple dependencies? Well, don’t worry too much because yet again, Dev Containers and codespaces have a solution for that.</p><p dir="auto">First, you can configure the <code>devcontainer.json</code> to give git commit permissions to other repositories of the same organizations <a href="https://github.com/sequentech/bulletin-board/blob/main/.devcontainer/devcontainer.json#L20">like we do here</a>. More details in <a href="https://docs.github.com/en/codespaces/managing-your-codespaces/managing-repository-access-for-your-codespaces#setting-additional-repository-permissions">the documentation</a>.</p><p dir="auto">Second, you can modify your <code>onCreateCommand</code> script to download this and any other dependency locally (just do a <code>git clone</code>).</p><p dir="auto">Third, use this local dependency. How to do this will depend on your toolchain. If you are using Rust, my advice is: don’t touch <code>Cargo.toml</code>. Yes, one quick and dirty option is to change your dependency from something like, maybe:</p></div></div></div></div></div>						</div>
				</div>
				<div class="elementor-element elementor-element-02019fd elementor-widget elementor-widget-code-highlight" data-id="02019fd" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>strand = { git = "https://github.com/sequentech/strand", features= ["rayon"] }
</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-914cd66 elementor-widget elementor-widget-text-editor" data-id="914cd66" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<div class="elementor-element elementor-element-fa3ef44 elementor-widget elementor-widget-text-editor" data-id="fa3ef44" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="highlight highlight-source-nix" dir="auto"><div class="elementor-element elementor-element-ce09b10 elementor-widget elementor-widget-text-editor" data-id="ce09b10" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><p dir="auto">to:</p></div></div></div></div></div>						</div>
				</div>
				<div class="elementor-element elementor-element-4d2e10d elementor-widget elementor-widget-code-highlight" data-id="4d2e10d" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>strand = { path="./strand", features=["rayon"] }
</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-96c9bd9 elementor-widget elementor-widget-text-editor" data-id="96c9bd9" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<div class="elementor-element elementor-element-fa3ef44 elementor-widget elementor-widget-text-editor" data-id="fa3ef44" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="highlight highlight-source-nix" dir="auto"><div class="elementor-element elementor-element-ce09b10 elementor-widget elementor-widget-text-editor" data-id="ce09b10" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="elementor-element elementor-element-619d5b3 elementor-widget elementor-widget-text-editor" data-id="619d5b3" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div dir="auto"><p dir="auto">But then you might end up committing that change in  <code>Cargo.toml</code>.and that just isn’t good <img src="https://s.w.org/images/core/emoji/15.0.3/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" />.</p><p dir="auto">Instead, you should create a new file to override dependencies called <code>.cargo/config.toml</code>, and add there something like:</p></div></div></div></div></div></div></div></div>						</div>
				</div>
				<div class="elementor-element elementor-element-8459d29 elementor-widget elementor-widget-code-highlight" data-id="8459d29" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-javascript line-numbers">
				<code readonly="true" class="language-javascript">
					<xmp>[patch.'https://github.com/sequentech/strand']
strand = { path = "strand", features= ["rayon"] }
</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-ee99569 elementor-widget elementor-widget-text-editor" data-id="ee99569" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<div class="elementor-element elementor-element-fa3ef44 elementor-widget elementor-widget-text-editor" data-id="fa3ef44" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="highlight highlight-source-nix" dir="auto"><div class="elementor-element elementor-element-ce09b10 elementor-widget elementor-widget-text-editor" data-id="ce09b10" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="elementor-element elementor-element-619d5b3 elementor-widget elementor-widget-text-editor" data-id="619d5b3" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div dir="auto"><div dir="auto">Additionally, add the <code>.cargo/config.toml</code> to <code>.gitignore</code> to ensure you don’t inadvertently commit this file.</div></div></div></div></div></div></div></div></div>						</div>
				</div>
				<div class="elementor-element elementor-element-147d25f elementor-widget elementor-widget-heading" data-id="147d25f" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Trick #8: Use multiple containers with docker compose</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-ecd35c7 elementor-widget elementor-widget-text-editor" data-id="ecd35c7" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<div class="elementor-element elementor-element-fa3ef44 elementor-widget elementor-widget-text-editor" data-id="fa3ef44" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="highlight highlight-source-nix" dir="auto"><div class="elementor-element elementor-element-ce09b10 elementor-widget elementor-widget-text-editor" data-id="ce09b10" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="elementor-element elementor-element-619d5b3 elementor-widget elementor-widget-text-editor" data-id="619d5b3" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div dir="auto"><div dir="auto"><p dir="auto">Maybe you are developing a backend service and you need to use a PostgreSQL database to run it. Or maybe you want to be able to run both the frontend and the backend within your development environment. Or.. you get the point.</p><p dir="auto">You can orchestrate the launch of multiple containers with <a href="https://code.visualstudio.com/docs/devcontainers/create-dev-container#_use-docker-compose" rel="nofollow">docker compose</a>. Because why not, it’s more flexible to always configure your <code>devcontainer.json</code> using docker compose.</p></div></div></div></div></div></div></div></div></div>						</div>
				</div>
				<div class="elementor-element elementor-element-aee4d38 elementor-widget elementor-widget-heading" data-id="aee4d38" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Trick #9: Multiple Dev Container configurations
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-66c812e elementor-widget elementor-widget-text-editor" data-id="66c812e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<div class="elementor-element elementor-element-fa3ef44 elementor-widget elementor-widget-text-editor" data-id="fa3ef44" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="highlight highlight-source-nix" dir="auto"><div class="elementor-element elementor-element-ce09b10 elementor-widget elementor-widget-text-editor" data-id="ce09b10" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="elementor-element elementor-element-619d5b3 elementor-widget elementor-widget-text-editor" data-id="619d5b3" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div dir="auto"><div dir="auto"><p dir="auto">Contemplate these cases:</p><ul dir="auto"><li>There are times you need to work with a local copy of dependencies, there are others you don’t.</li><li>There are some times where you broke your prebuilds and you want to launch a new Dev Container with no setup script.</li><li>Maybe sometimes you want to develop with an environment using PostgreSQL as a database backend and others with MariaDB.</li><li>Or maybe you actually have multiple projects within a single repository and you want to be able to have a ready-to-go Dev container for each of them (Hello there monorepo people!).</li></ul><p dir="auto">All this can be solved using <a href="https://containers.dev/implementors/spec/#devcontainerjson" rel="nofollow">multiple Dev Container configurations</a>. You can have multiple, ready-to-go <code>devcontainer.json</code> files inside the <code>.devcontainer</code> directory, using the pattern <code>.devcontainer/{name}/devcontainer.json</code>. And <a href="https://containers.dev/implementors/spec/#devcontainerjson" rel="nofollow">Codespaces also supports this feature natively</a>.</p><p dir="auto">Remember these tricks are composable. For example, in this case you can configure prebuilds for each Dev Container configuration.</p></div></div></div></div></div></div></div></div></div>						</div>
				</div>
				<div class="elementor-element elementor-element-bd7f030 elementor-widget elementor-widget-heading" data-id="bd7f030" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Trick #10: Custom codespaces
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-7ae43c5 elementor-widget elementor-widget-text-editor" data-id="7ae43c5" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<div class="elementor-element elementor-element-fa3ef44 elementor-widget elementor-widget-text-editor" data-id="fa3ef44" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="highlight highlight-source-nix" dir="auto"><div class="elementor-element elementor-element-ce09b10 elementor-widget elementor-widget-text-editor" data-id="ce09b10" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="elementor-element elementor-element-619d5b3 elementor-widget elementor-widget-text-editor" data-id="619d5b3" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div dir="auto"><div dir="auto"><p dir="auto">In Github Codespaces you can use the <a href="https://github.blog/2022-04-20-codespaces-multi-repository-monorepo-scenarios/#advanced-create" rel="nofollow">Advance Create feature</a> to configure in more detail your new codespace: choose the specific branch, the number of cores or amount of RAM of the container, the Dev Container file, and actually it has a nice interface to just modify manually the <code>devcontainer.json</code> before launching. This can be helpful in disaster recovery scenarios, for example in broken configurations you can edit the <code>onCreateCommand</code> or anything else.</p></div></div></div></div></div></div></div></div></div>						</div>
				</div>
				<div class="elementor-element elementor-element-c7a5b40 elementor-widget elementor-widget-heading" data-id="c7a5b40" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Trick #11: Garbage collection
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-4515ef5 elementor-widget elementor-widget-text-editor" data-id="4515ef5" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<div class="elementor-element elementor-element-fa3ef44 elementor-widget elementor-widget-text-editor" data-id="fa3ef44" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="highlight highlight-source-nix" dir="auto"><div class="elementor-element elementor-element-ce09b10 elementor-widget elementor-widget-text-editor" data-id="ce09b10" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="elementor-element elementor-element-619d5b3 elementor-widget elementor-widget-text-editor" data-id="619d5b3" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div dir="auto"><div dir="auto"><p dir="auto">Dev containers are typically launched with a specific disk size. Sometimes this turns out not to be enough. Now imagine you have uncommitted/unpushed changes in the container. There are multiple things you can do:</p><ul dir="auto"><li>If the problem is that Nix is using too much space, try running <a href="https://nixos.org/guides/nix-pills/garbage-collector.html" rel="nofollow"><code>nix-collect-garbage</code></a>.</li><li>You can use the Github Codespaces UI to <a href="https://docs.github.com/en/codespaces/troubleshooting/exporting-changes-to-a-branch">export changes to a branch</a>.</li></ul><p dir="auto">Oh and now that we are talking about garbage collection: you can also review and manage all the codespaces you personally have in <a href="https://github.com/codespaces">github.com/codespaces</a>. When working with multiple repository, with multiple features or branches, you might forget about some codespaces.</p><p dir="auto">Codespaces typically <a href="https://docs.github.com/en/codespaces/customizing-your-codespace/setting-your-timeout-period-for-github-codespaces">auto-stop after idling for 30 minutes</a> – and of course this is configurable. But they are still wasting/spending disk space. So go to <a href="https://github.com/codespaces">github.com/codespaces</a> and delete all your unneeded codespaces.</p></div></div></div></div></div></div></div></div></div>						</div>
				</div>
				<div class="elementor-element elementor-element-4d18077 elementor-widget elementor-widget-heading" data-id="4d18077" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Trick #12: Codespaces vscode plugin
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-cc57df8 elementor-widget elementor-widget-text-editor" data-id="cc57df8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<div class="elementor-element elementor-element-fa3ef44 elementor-widget elementor-widget-text-editor" data-id="fa3ef44" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="highlight highlight-source-nix" dir="auto"><div class="elementor-element elementor-element-ce09b10 elementor-widget elementor-widget-text-editor" data-id="ce09b10" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="elementor-element elementor-element-619d5b3 elementor-widget elementor-widget-text-editor" data-id="619d5b3" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div dir="auto"><div dir="auto"><p dir="auto">So you can go to your repo in github.com, click on the big green button (<code>Code</code>) and launch a new codespace right there and it will open the codespace in vscode running within the web browser in a new tab.</p><p dir="auto">But it doesn’t stop there. You can perhaps close that tab, and then click again in that green button, see there listed your just-created codespace, click on the <code>...</code> button -&gt; <code>Open in..</code> -&gt; <code>Open in Visual Studio Code</code>. And if your local vscode installation has the <a href="https://marketplace.visualstudio.com/items?itemName=GitHub.codespaces" rel="nofollow">Codespaces extension</a> it will just open in a new window of your vscode.</p><p dir="auto">You can even forget altogether about the web browser and do the whole thing from within vscode. With <code>Cmd + Shift + P</code> search for <code>Codespaces</code> and from there you can: connect to a codespace, stop a codespace, rebuild it, create a new one from a specific repository.. you name it.</p></div></div></div></div></div></div></div></div></div>						</div>
				</div>
				<div class="elementor-element elementor-element-984e234 elementor-widget elementor-widget-heading" data-id="984e234" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Wrapping up
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-a2aa0be elementor-widget elementor-widget-text-editor" data-id="a2aa0be" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<div class="elementor-element elementor-element-fa3ef44 elementor-widget elementor-widget-text-editor" data-id="fa3ef44" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="highlight highlight-source-nix" dir="auto"><div class="elementor-element elementor-element-ce09b10 elementor-widget elementor-widget-text-editor" data-id="ce09b10" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div class="elementor-element elementor-element-619d5b3 elementor-widget elementor-widget-text-editor" data-id="619d5b3" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><div dir="auto"><div dir="auto"><p dir="auto">There are other avenues to explore in the future. For example, <a href="https://devenv.sh/integrations/codespaces-devcontainer/" rel="nofollow">denvenv.sh</a> also supports integration with Dev Containers and they surely also integrates well with cachix since it comes from the same developer.</p><p dir="auto">Another trick we have not explored yet is to use <a href="https://containers.dev/implementors/features/" rel="nofollow">Dev Container Features</a> to package (quote) “self-contained, shareable units of installation code and development container configuration”.</p><p dir="auto">We’ll continue our road to making development easier and keep you updated.</p></div></div></div></div></div></div></div></div></div>						</div>
				</div>
				</div>
					</div>
				</div>
				</div>
		<p>The post <a href="/tech/a-bag-of-dev-container-tricks/">A bag of Dev Container Tricks</a> appeared first on <a href="/">Sequent</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Homomorphic vs Mixnet Based E-voting</title>
		<link>/blog/homomorphic-vs-mixnet-based-e-voting/</link>
		
		<dc:creator><![CDATA[Serhii Bohynia]]></dc:creator>
		<pubDate>Mon, 20 Feb 2023 07:44:38 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Research]]></category>
		<category><![CDATA[blog]]></category>
		<guid isPermaLink="false">/?p=1612</guid>

					<description><![CDATA[<p>Although proposals have been made using other techniques, most common modern approaches to constructing secure voting systems can be divided into two categories: those based on homomorphic tallying (shorthand “homomorphic systems”) and those based on verifiable mixnets (shortand “mixnet systems”). Most systems, both prototypes in academia as well as production systems in industry, use one [&#8230;]</p>
<p>The post <a href="/blog/homomorphic-vs-mixnet-based-e-voting/">Homomorphic vs Mixnet Based E-voting</a> appeared first on <a href="/">Sequent</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1612" class="elementor elementor-1612" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-25c11fc e-flex e-con-boxed e-con e-parent" data-id="25c11fc" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-975bc23 elementor-widget elementor-widget-text-editor" data-id="975bc23" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Although proposals have been made using other techniques, most common modern approaches to constructing secure voting systems can be divided into two categories: those based on homomorphic tallying (shorthand “homomorphic systems”) and those based on verifiable mixnets (shortand “mixnet systems”). Most systems, both prototypes in academia as well as production systems in industry, use one (or both) of these technologies to achieve the necessary properties for what is termed secure e-voting, and the related gold standard end-to-end verifiable voting.</p>						</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-80644e3 e-flex e-con-boxed e-con e-parent" data-id="80644e3" data-element_type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-78dd4fd e-con-full e-flex elementor-invisible e-con e-child" data-id="78dd4fd" data-element_type="container" data-settings="{&quot;animation&quot;:&quot;fadeInLeft&quot;}">
				<div class="elementor-element elementor-element-aac0576 elementor-widget elementor-widget-button" data-id="aac0576" data-element_type="widget" data-widget_type="button.default">
				<div class="elementor-widget-container">
					<div class="elementor-button-wrapper">
			<a class="elementor-button elementor-button-link elementor-size-sm" href="/blog/">
						<span class="elementor-button-content-wrapper">
						<span class="elementor-button-icon elementor-align-icon-left">
				<i aria-hidden="true" class="fas fa-angle-left"></i>			</span>
									<span class="elementor-button-text">Go Back</span>
					</span>
					</a>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-3699139 elementor-widget elementor-widget-heading" data-id="3699139" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<div class="elementor-heading-title elementor-size-default">Blog</div>		</div>
				</div>
				<div class="elementor-element elementor-element-1d509e5 elementor-widget__width-inherit elementor-widget elementor-widget-theme-post-title elementor-page-title elementor-widget-heading" data-id="1d509e5" data-element_type="widget" data-widget_type="theme-post-title.default">
				<div class="elementor-widget-container">
			<h1 class="elementor-heading-title elementor-size-default">Homomorphic vs Mixnet Based E-voting</h1>		</div>
				</div>
				<div class="elementor-element elementor-element-f6bf2c5 elementor-widget elementor-widget-text-editor" data-id="f6bf2c5" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<span>Blog</span>, <span>Research</span>						</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-f8842a3 e-flex e-con-boxed e-con e-parent" data-id="f8842a3" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-52083a1 e-con-full e-flex e-con e-child" data-id="52083a1" data-element_type="container">
				<div class="elementor-element elementor-element-b6c39b5 uael-heading-align-left elementor-widget elementor-widget-uael-table-of-contents" data-id="b6c39b5" data-element_type="widget" data-settings="{&quot;heading_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;content_between_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:16,&quot;sizes&quot;:[]},&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;],&quot;scroll_offset&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_text_align&quot;:&quot;left&quot;,&quot;heading_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;sticky_offset&quot;:0,&quot;sticky_effects_offset&quot;:0}" data-widget_type="uael-table-of-contents.default">
				<div class="elementor-widget-container">
					<div class="uael-toc-main-wrapper" data-headings="h2,h3" >
			<div class="uael-toc-wrapper">
				<div class="uael-toc-header">
					<span class="uael-toc-heading elementor-inline-editing" data-elementor-setting-key="heading_title" data-elementor-inline-editing-toolbar="basic" ></span>
									</div>
								<div class="uael-toc-toggle-content">
					<div class="uael-toc-content-wrapper">
						
							<ul data-toc-headings="headings" class="uael-toc-list uael-toc-list-none" data-scroll="500" ></ul>
											</div>
				</div>
				<div class="uael-toc-empty-note">
					<span>Add a header to begin generating the table of contents</span>
				</div>
			</div>
					</div>
				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-90371b3 e-con-full e-flex e-con e-child" data-id="90371b3" data-element_type="container">
				<div class="elementor-element elementor-element-d1a5a6f elementor-widget elementor-widget-image" data-id="d1a5a6f" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="1200" height="630" src="/wp-content/uploads/2024/03/homomorphic-vs-mixnet-based-evoting.png" class="attachment-full size-full wp-image-1617" alt="" srcset="/wp-content/uploads/2024/03/homomorphic-vs-mixnet-based-evoting.png 1200w, /wp-content/uploads/2024/03/homomorphic-vs-mixnet-based-evoting-300x158.png 300w, /wp-content/uploads/2024/03/homomorphic-vs-mixnet-based-evoting-1024x538.png 1024w, /wp-content/uploads/2024/03/homomorphic-vs-mixnet-based-evoting-768x403.png 768w" sizes="(max-width: 1200px) 100vw, 1200px" />													</div>
				</div>
		<div class="elementor-element elementor-element-b204d07 e-flex e-con-boxed e-con e-child" data-id="b204d07" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-93e4737 elementor-widget elementor-widget-text-editor" data-id="93e4737" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Although proposals have been made using other techniques, most common modern approaches to constructing secure voting systems can be divided into two categories: those based on homomorphic tallying (shorthand “homomorphic systems”) and those based on verifiable mixnets (shortand “mixnet systems”). Most systems, both prototypes in academia as well as production systems in industry, use one (or both) of these technologies to achieve the necessary properties for what is termed secure e-voting, and the related gold standard end-to-end verifiable voting.</p><p>In this post we briefly describe the two approaches and then offer a qualitative pros &amp; cons comparison of the two for aspects we have found significant in our experience evaluating and operating such systems. Given that Sequent’s voting system uses a mixnet as its core, it is unsurprising that our conclusion following the below comparisons leans in favour of that choice when building a secure voting system. However, at Sequent we’re open to the possibility of adding a homomorphic backend to our platform if careful analysis suggests it is desirable for particular use cases that may arise.</p>						</div>
				</div>
					</div>
				</div>
				<div class="elementor-element elementor-element-ea1c1fa elementor-widget elementor-widget-heading" data-id="ea1c1fa" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Homomorphic tallying</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-a05fc81 elementor-widget elementor-widget-text-editor" data-id="a05fc81" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Voting systems based on homomorphic tallying exploit the homomorphic property of the underlying encryption to compute tallies. This homomorphic property makes it possible to add encrypted numbers together without decrypting them. The beauty of applying this technique to voting lies in the fact that when computing an election result we do not need to decrypt individual votes, only their sum, so that the secrecy of an individual’s ballot is preserved. </p><p>Unfortunately some technicalities have to be solved. We need a way to encode voter selections in a way that is amenable to this type of summing. This usually amounts to constructing vectors of ciphertexts for which a 1 represents a marked option on the ballot while a 0 represents an unmarked one, and then summing these vectors component-wise. In addition, because we only decrypt sums we also need a way to ensure that these encryptions represent valid choices. Not only because ballots could be nonsensical, but they could also be constructed maliciously to grant a voter more power than they ought to have. Preventing such cases is accomplished using zero knowledge proofs: using that technique we still don’t learn the contents of individual ballots but we are assured that they are valid. </p><p>You can learn more about the technical details of homomorphic tallying from any of the existing proposals featuring it in the literature, a prominent example is <a href="https://github.com/microsoft/electionguard/releases/download/v1.1/EG_spec_v1_1.pdf">ElectionGuard</a>.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-a746a36 elementor-widget elementor-widget-heading" data-id="a746a36" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Verifiable mixnets
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-34554c4 elementor-widget elementor-widget-text-editor" data-id="34554c4" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Unlike homomorphic tallying, systems based on verifiable mixnets <i>do </i>decrypt individual ballots, but they do this <i>after</i> a process of anonymization which breaks the link between an encrypted ballot and the voter that cast it. The anonymization process amounts to a  <i>shuffling</i> of a set of ballots such that the output set cannot be correlated with the input. The central problem that a verifiable mixnet solves is that of performing this shuffle while still ensuring that the output of that process corresponds to what went in, in other words, no manipulation took place. This is where, as above, zero knowledge proofs enter the picture, ensuring that the shuffling is correct while revealing no other information.</p>						</div>
				</div>
		<div class="elementor-element elementor-element-f2e0188 e-con-full e-flex e-con e-child" data-id="f2e0188" data-element_type="container">
				<div class="elementor-element elementor-element-5f57c5d elementor-widget elementor-widget-image" data-id="5f57c5d" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="768" height="408" src="/wp-content/uploads/2024/03/mixnet-taken-768x408-1.png" class="attachment-large size-large wp-image-1752" alt="" srcset="/wp-content/uploads/2024/03/mixnet-taken-768x408-1.png 768w, /wp-content/uploads/2024/03/mixnet-taken-768x408-1-300x159.png 300w" sizes="(max-width: 768px) 100vw, 768px" />													</div>
				</div>
				<div class="elementor-element elementor-element-65bb0bf elementor-widget elementor-widget-text-editor" data-id="65bb0bf" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>(A mixnet with three nodes, taken from <a href="https://proceedings.ictinnovations.org/attachment/paper/234/comparing-performance-of-decryption-and-re-encryption-mixnets.pdf">here</a>)</p>						</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-1bd460d elementor-widget elementor-widget-text-editor" data-id="1bd460d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Verifiable mixnets come in <a href="https://eprint.iacr.org/2020/490.pdf">different flavours</a>, one example (we use at Sequent) is that of re-encryption mixnets. These implement the shuffle by permuting and re-encrypting the input ciphertexts such that the result is a shuffled set of ciphertexts that are equivalent but cannot be correlated with the input. Of course, whoever performs this shuffle <i>does</i> know the correspondence, but that’s where the “net” part of mixnet comes in. If this process is repeated by several independent parties, none of them will be able to trace the path of any ciphertext through the mix network: this will only be possible if all the independent parties pool their information together. So in effect, a mixnet implements a distribution of trust for the secrecy of the ballot, a recurring theme for secure voting systems.</p><p>You can learn more about all the technical details that we use at Sequent in <a href="https://www.csc.kth.se/~dog/research/papers/TW10Conf.pdf">these</a> <a href="https://eprint.iacr.org/2011/168.pdf">papers</a>, and of course directly looking at our source code <a href="https://github.com/sequentech/">repository</a>.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-7e897ef elementor-widget elementor-widget-heading" data-id="7e897ef" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Comparison</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-cd3b001 elementor-widget elementor-widget-text-editor" data-id="cd3b001" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Given this short description of the two techniques let’s take a look at some pros and cons of each for e-voting. We have divided the comparison into sections that are significant in our experience, in alphabetical order.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-4371ad3 elementor-widget elementor-widget-heading" data-id="4371ad3" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Generality</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-748493f elementor-widget elementor-widget-text-editor" data-id="748493f" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>By generality we mean the degree to which the underlying cryptographic protocol can support a wide range of election and ballot types. Starting from the simplest election type, one which poses a yes/no question to voters, election and ballot types can increase in complexity up to schemes involving, for example, choosing one or more out of several choices, ordering of choices, scoring choices numerically, or even write-ins where voters can outright fill in a previously unspecified choice. </p><p>Generality is probably the axis along which homomorphic vs mixnet based voting systems differ most. As we mentioned before, a homomorphic tally system needs to convert voter’s ballots into suitable ciphertexts that can be summed exploiting the scheme’s homomorphic property. Unfortunately, beyond the case of choosing n-out-of-k options, this rules out the more complex examples we mentioned. Mixnets on the other hand can handle arbitrary ballot types, provided the ciphertext is sufficiently large to capture the ballot information. This makes generality a strong advantage of mixnet systems over homomorphic ones.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-f62cdb4 elementor-widget elementor-widget-heading" data-id="f62cdb4" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Implementation complexity
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-25ac4d6 elementor-widget elementor-widget-text-editor" data-id="25ac4d6" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>This category refers to the complexity of the software that makes up the voting systems. Absent other considerations, a higher implementation complexity is a negative factor in our comparison. One immediate reason is the higher difficulty in developing and maintaining the software that makes up the system. More importantly, a more complex implementation is more vulnerable to implementation errors and is harder to secure against both random errors and adversarial attacks.</p><p>In terms of total implementation complexity it is probably fair to say that a homomorphic system is less complex and wins out in this category. But this result leaves out important details as to where the complexity lies. Whereas mixnet systems pay a high complexity cost for the development of the shuffling and its proofs, homomorphic systems pay most of their complexity cost in ensuring that cast ballots are correctly constructed. This difference is a reflection of a key difference between the two. Homomorphic systems do not decrypt individual ballots and rely on complex proofs to certify that said ballots are valid. Mixnet systems however do decrypt after anonymization, so it is trivial in that case to remove invalid or maliciously constructed ballots.</p><p>The consequence of this difference is that homomorphic systems pay a large fraction of their complexity cost on the client where complex proofs must be constructed, and less so on the backend where the tally is more straightforward. Mixnets have the opposite complexity layout, the shuffle and tallying software is sophisticated, whereas the client is relatively simple. It could be argued that complexity on the client side is more problematic, since it is deployed in an uncontrolled environment, the user’s device, and is subject to greater degree of heterogeneity and uncertainty. Conversely, the backend runs in a controlled environment, the systems that specialised entities must run as trustees. In spite of this, we maintain that homomorphic systems come out ahead with respect to implementation complexity.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-f78c3f0 elementor-widget elementor-widget-heading" data-id="f78c3f0" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Performance</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-afe447d elementor-widget elementor-widget-text-editor" data-id="afe447d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>The discussion here draws parallels with the previous section, but replacing implementation complexity with computational complexity. Specifically, a homomorphic system requires more computation on the client side and less so on the backend. This occurs because these systems typically encrypt each possible selection with a ciphertext, resulting in vectors of ciphertexts that grow with the number of options presented to the voter. On top of this, zero knowledge proofs must be constructed for each of these encryptions. Both the encryption and the zero knowledge proofs add computational cost, a computation that takes place in the voter’s client which is limited in performance. On the other hand, once the ballots have reached the backend the necessary computation to verify them and perform the homomorphic sum is reduced, relative to the hardware characteristics available in a server environment..</p><p>Mixnet systems have the opposite layout. Ballot selections can usually be encoded into a single ciphertext, and proofs of validity are not essential as ciphertexts are decrypted after anonymization. However, the process of anonymization, the shuffle, is computationally intensive and grows in complexity the higher the degree of trust distribution is required. Depending on the techniques used, the size of the electorate and the hardware involved a tally can take up to hours in the worst cases.</p><p>Both homomorphic and mixnet based systems may encounter situations which make it a suboptimal choice. But while it is difficult to remedy cases in which client devices cannot be expected to compute large numbers of ciphertexts and proofs, it is usually easier to “throw hardware at the problem” on the backend. For this reason mixnets are more robust to demanding performance scenarios. However, when they can be applied, homomorphic systems show significantly better performance than mixnet systems in general. </p>						</div>
				</div>
				<div class="elementor-element elementor-element-c5afd92 elementor-widget elementor-widget-heading" data-id="c5afd92" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Privacy</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-2fa3f79 elementor-widget elementor-widget-text-editor" data-id="2fa3f79" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>There are different degrees to which a voting system can be said to achieve privacy. The most common and basic requirement is ballot secrecy: the voting system does not reveal who voted for what. There are stronger notions of privacy such as receipt-freeness, where the voter cannot prove how they voted, and coercion resistance where the voter is able to cast their chosen vote even under the influence of a coercer.</p><p>Homomorphic and mixnet based e-voting systems have been the subject of academic research for decades in an attempt to satisfy these requirements. While many proposals exist that achieve ballot secrecy, receipt-freeness and coercion resistance are still an open problem. Our comparison with respect to privacy is then limited to ballot secrecy.</p><p>If constructed correctly (including choices for security parameters), and modulo implementation complexity aspects, both types of systems offer comparable ballot secrecy using cryptography that relies on well known hardness assumptions. In fact, in prominent instances of protocols of both kinds there is overlap in the cryptographic techniques with identical security properties, as is the case for example when using the <a href="https://en.wikipedia.org/wiki/ElGamal_encryption">ElGamal</a> cryptosystem.</p><p>There are some considerations that escape a binary definition of ballot secrecy. One could argue that the tally counts are a form of leakage since they reveal more information than strictly the final result itself, a concern addressed by research into <a href="https://eprint.iacr.org/2020/405.pdf">tally-hiding</a> schemes. But this is true for both types of systems; homomorphic e-voting systems are not fully homomorphic, and are unable to perform arbitrary computations in ciphertext space to yield leak free results. In summary, we consider homomorphic and mixnet systems to be comparable with respect to privacy.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-5c1b403 elementor-widget elementor-widget-heading" data-id="5c1b403" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Verifiability</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-a25b3c0 elementor-widget elementor-widget-text-editor" data-id="a25b3c0" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>The gold standard for secure voting systems is <a href="https://escholarship.org/content/qt7c9994dg/qt7c9994dg_noSplash_97d64dc5a809c552701079250f47b4cb.pdf">end-to-end verifiability</a>. A system is end-to-end verifiable if it is possible to certify that each of the key operations that make up an election (ballot casting, ballot recording and ballot counting) have been executed correctly. The question then becomes about whether homomorphic and mixnet systems can satisfy the requirements that make a system end-to-end verifiable.</p><p>Again, homomorphic and mixnet based e-voting systems have been the subject of academic research to satisfy these requirements. Within the category of end-to-end verifiability, there exist different proposals as to how each step of the verification takes place. One notable step is cast-as-intended verification, for which adequate usability is still an open problem. But whatever mechanisms are chosen to perform these verifications, they are generally equally applicable to both homomorphic and mixnet systems.</p><p>We can say that, if constructed correctly, both types of systems achieve comparable levels of verifiability;  there are many examples of both types in the academic <a href="https://arxiv.org/pdf/1605.08554.pdf">literature</a> on end-to-end verifiable systems. <a href="https://www.usenix.org/legacy/events/sec08/tech/full_papers/adida/adida.pdf">Helios</a> in particular is a system that has been proposed in both homomorphic and mixnet variants. In summary, we consider homomorphic and mixnet based systems to be comparable with respect to verifiability.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-d59c7b2 elementor-widget elementor-widget-heading" data-id="d59c7b2" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Conclusion</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-e673384 elementor-widget elementor-widget-text-editor" data-id="e673384" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>One would think that the conclusion of our qualitative comparison between homomorphic and mixnet based systems would favour the former, given that it edges out its mixnet counterpart in more of the categories above. However, this advantage only manifests in the concrete cases where homomorphic systems can be applied at all. In contrast, mixnets can handle a much wider range of scenarios, albeit at a higher complexity cost. If one requires a system for a particular use case which does not rule out homomorphic based systems, they are better. But if one wants a future proof system that can be relied upon in general, mixnets are a better choice.</p>						</div>
				</div>
				</div>
					</div>
				</div>
				</div>
		<p>The post <a href="/blog/homomorphic-vs-mixnet-based-e-voting/">Homomorphic vs Mixnet Based E-voting</a> appeared first on <a href="/">Sequent</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Bringing Sequent’s End-To-End Verifiable Voting Solution to the German Market</title>
		<link>/case-study/bringing-sequents-end-to-end-verifiable-voting-solution-to-the-german-market/</link>
		
		<dc:creator><![CDATA[Serhii Bohynia]]></dc:creator>
		<pubDate>Tue, 14 Feb 2023 04:10:38 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Case Studies]]></category>
		<category><![CDATA[blog]]></category>
		<guid isPermaLink="false">/?p=1963</guid>

					<description><![CDATA[<p>Based in Lueneburg, Germany, Electric Paper Informations Systeme (EPI) is a company that provides impactful solutions for the digitalization of the workplace and has been working in the field of tension between “people, paper and processes”. For over 20 years, they have contributed to the efficient conduct of internal elections across departmental and organizational boundaries. [&#8230;]</p>
<p>The post <a href="/case-study/bringing-sequents-end-to-end-verifiable-voting-solution-to-the-german-market/">Bringing Sequent’s End-To-End Verifiable Voting Solution to the German Market</a> appeared first on <a href="/">Sequent</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1963" class="elementor elementor-1963" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-66a0b9d2 e-flex e-con-boxed e-con e-parent" data-id="66a0b9d2" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-33686564 elementor-widget elementor-widget-text-editor" data-id="33686564" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Based in Lueneburg, Germany, Electric Paper Informations Systeme (EPI) is a company that provides impactful solutions for the digitalization of the workplace and has been working in the field of tension between “people, paper and processes”. For over 20 years, they have contributed to the efficient conduct of internal elections across departmental and organizational boundaries. EPI has partnered with universities, enterprises, trade unions and chambers of commerce to offer both paper-based and online voting options in elections, ensuring reliable, customizable and scalable end-to-end voting solutions for its customers. </p>						</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-3fc1c732 e-flex e-con-boxed e-con e-parent" data-id="3fc1c732" data-element_type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-57909b98 e-con-full e-flex elementor-invisible e-con e-child" data-id="57909b98" data-element_type="container" data-settings="{&quot;animation&quot;:&quot;fadeInLeft&quot;}">
				<div class="elementor-element elementor-element-3cbadfb4 elementor-widget elementor-widget-button" data-id="3cbadfb4" data-element_type="widget" data-widget_type="button.default">
				<div class="elementor-widget-container">
					<div class="elementor-button-wrapper">
			<a class="elementor-button elementor-button-link elementor-size-sm" href="/blog/">
						<span class="elementor-button-content-wrapper">
						<span class="elementor-button-icon elementor-align-icon-left">
				<i aria-hidden="true" class="fas fa-angle-left"></i>			</span>
									<span class="elementor-button-text">Go Back</span>
					</span>
					</a>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-c90373b elementor-widget elementor-widget-heading" data-id="c90373b" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<div class="elementor-heading-title elementor-size-default">Blog</div>		</div>
				</div>
				<div class="elementor-element elementor-element-7237d18 elementor-widget__width-inherit elementor-widget elementor-widget-theme-post-title elementor-page-title elementor-widget-heading" data-id="7237d18" data-element_type="widget" data-widget_type="theme-post-title.default">
				<div class="elementor-widget-container">
			<h1 class="elementor-heading-title elementor-size-default">Bringing Sequent’s End-To-End Verifiable Voting Solution to the German Market</h1>		</div>
				</div>
				<div class="elementor-element elementor-element-65d60ba0 elementor-widget elementor-widget-text-editor" data-id="65d60ba0" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<span>Blog</span>, <span>Case Studies</span>						</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-725c1230 e-flex e-con-boxed e-con e-parent" data-id="725c1230" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-3d2da1e2 e-con-full e-flex e-con e-child" data-id="3d2da1e2" data-element_type="container">
				<div class="elementor-element elementor-element-31473979 uael-heading-align-left elementor-widget elementor-widget-uael-table-of-contents" data-id="31473979" data-element_type="widget" data-settings="{&quot;heading_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;content_between_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:16,&quot;sizes&quot;:[]},&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;],&quot;scroll_offset&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_text_align&quot;:&quot;left&quot;,&quot;heading_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;sticky_offset&quot;:0,&quot;sticky_effects_offset&quot;:0}" data-widget_type="uael-table-of-contents.default">
				<div class="elementor-widget-container">
					<div class="uael-toc-main-wrapper" data-headings="h2,h3" >
			<div class="uael-toc-wrapper">
				<div class="uael-toc-header">
					<span class="uael-toc-heading elementor-inline-editing" data-elementor-setting-key="heading_title" data-elementor-inline-editing-toolbar="basic" ></span>
									</div>
								<div class="uael-toc-toggle-content">
					<div class="uael-toc-content-wrapper">
						
							<ul data-toc-headings="headings" class="uael-toc-list uael-toc-list-none" data-scroll="500" ></ul>
											</div>
				</div>
				<div class="uael-toc-empty-note">
					<span>Add a header to begin generating the table of contents</span>
				</div>
			</div>
					</div>
				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-39aa16eb e-con-full e-flex e-con e-child" data-id="39aa16eb" data-element_type="container">
				<div class="elementor-element elementor-element-7cd31fa3 elementor-widget elementor-widget-image" data-id="7cd31fa3" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="768" height="403" src="/wp-content/uploads/2024/03/14-768x403-1.png" class="attachment-full size-full wp-image-1964" alt="" srcset="/wp-content/uploads/2024/03/14-768x403-1.png 768w, /wp-content/uploads/2024/03/14-768x403-1-300x157.png 300w" sizes="(max-width: 768px) 100vw, 768px" />													</div>
				</div>
		<div class="elementor-element elementor-element-5da40ac4 e-flex e-con-boxed e-con e-child" data-id="5da40ac4" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-674e2766 elementor-widget elementor-widget-text-editor" data-id="674e2766" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Based in Lueneburg, Germany, Electric Paper Informations Systeme (EPI) is a company that provides impactful solutions for the digitalization of the workplace and has been working in the field of tension between “people, paper and processes”. For over 20 years, they have contributed to the efficient conduct of internal elections across departmental and organizational boundaries. EPI has partnered with universities, enterprises, trade unions and chambers of commerce to offer both paper-based and online voting options in elections, ensuring reliable, customizable and scalable end-to-end voting solutions for its customers. </p>						</div>
				</div>
				<div class="elementor-element elementor-element-b2f20dc elementor-widget elementor-widget-heading" data-id="b2f20dc" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Challenges</h2>		</div>
				</div>
					</div>
				</div>
				<div class="elementor-element elementor-element-7200f011 elementor-widget elementor-widget-heading" data-id="7200f011" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Complicated Electoral Processes
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-5099933f elementor-widget elementor-widget-text-editor" data-id="5099933f" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Every year, EPI conducts multiple elections, many of them for both national and highly complex organizations with special ballot requirements that can complicate the election process. One example is the University of Muenster who commissioned EPI to create 99 different ballot styles that included relevant student candidates based on their majors. The complexities of such electoral processes done on paper, increases the possibility of human mistake. In addition, paper-ballot designing, printing, distributing, and counting in this case can be extremely costly and challenging from an operational perspective. </p>						</div>
				</div>
				<div class="elementor-element elementor-element-1c58ec7d elementor-widget elementor-widget-heading" data-id="1c58ec7d" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Hybrid Elections – In-Person and Remote Voting 
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-1e2e7a84 elementor-widget elementor-widget-text-editor" data-id="1e2e7a84" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>With the COVID-19 pandemic and growing demand from EPI’s clients to make voting more convenient and accessible to voters, EPI needed a solution that would work seamlessly with their election management system (<i>uniWAHL) </i>to provide a fully online or hybrid elections where it was possible to vote both in-person (on paper) and remotely using the voter’s mobile. The solution should also be flexible enough to suit the various requirements of their clients without the need for custom development.</p><p>EPI initially thought about developing their own solution for the German market, but developing such a program that adheres to security, accessibility, end-to-end verifiability and regulatory standards comes with a significant amount of capital investment required, development challenges and would dramatically delay the time-to-market. </p>						</div>
				</div>
				<div class="elementor-element elementor-element-28102c3 elementor-widget elementor-widget-heading" data-id="28102c3" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Security, Regulations and Accessibility 
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-4d8f4009 elementor-widget elementor-widget-text-editor" data-id="4d8f4009" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>As EPI decided to make the transition to offering its clients the option to vote remotely online (with or without an in-person paper-based voting option) it was now imperative for them to find a solution that allowed them to seamlessly handle online voting with their election management system (<i>uniWAHL) </i>and at the same time, match the same level of security, data-compliance and  the Council of Europe Recommendation Standards for e-Voting (e.g. online voting). Furthermore, the solution had to be  mobile-friendly, fully responsive and easily accessible to people with disabilities.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-776a167e elementor-widget elementor-widget-heading" data-id="776a167e" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">How Sequent Helps EPI
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-6297308c elementor-widget elementor-widget-text-editor" data-id="6297308c" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>EPI selected Sequent’s online voting platform and with the guidance of Sequent’s development team, successfully integrated it with their existing election management software, <i>uniWAHL,</i> to deliver fully online or hybrid elections in a safe, reliable, scalable, and cost-effective way to their clients.</p><p>Election configuration and results are imported directly to and from Sequent’s online voting solution (locally branded as EPI’s OWS – Online Voting System) and the entire system is hosted on German Deutsche Telekom servers and is operated on a highly-secure level. </p><p>In short, the focus is on providing a combination of paper-based voting, where votes are manually submitted and scanned for tallying, as well as an online solution for remoting voting, EPI along with Sequent’s solution offers an end-to-end voting solution for its clients.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-55ceab07 elementor-widget elementor-widget-heading" data-id="55ceab07" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Regulations, Security, and Verifiability
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-656ab32b elementor-widget elementor-widget-text-editor" data-id="656ab32b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Sequent’s solution has been in development since 2014 in accordance with online voting standards and cybersecurity best practices, including the Council of Europe Recommendation Standards from 2017. Moreover, Sequent is developing its solution as an open-source software, in close collaboration with academic experts and uses battle-tested cryptography to ensure end-to-end verifiability (where voters can individually verify their ballot cast and count them correctly and where auditors can audit the election results) – This is why Sequent’s unique approach was a natural choice for EPI.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-28da0421 elementor-widget elementor-widget-heading" data-id="28da0421" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Easier Management of Complex Electoral Processes
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-6c691a42 elementor-widget elementor-widget-text-editor" data-id="6c691a42" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>By leveraging Sequent’s comprehensive API interface, EPI was able to easily design in their election management system multiple, user-friendly ballot styles and seamlessly create a digital copy on Sequent’s platform. In the case of hybrid elections, a twin copy of the paper ballot will be created on the Sequent platform to ensure a unified voter experience. Cast ballots will later be consolidated back into EPI’s system to ensure a single source of record. </p>						</div>
				</div>
				<div class="elementor-element elementor-element-2605f712 elementor-widget elementor-widget-heading" data-id="2605f712" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Accessibility</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-4247de7e elementor-widget elementor-widget-text-editor" data-id="4247de7e" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Sequent’s online voting platform is a web-based, mobile-friendly, and fully responsive application. This means voters are not obligated to download any app in advance and can use the most current (as well as older models) mobile devices or a PC to cast their ballot. Sequent is also fully compliant with WCAG 2.1 AA standards for people with disabilities. </p>						</div>
				</div>
				<div class="elementor-element elementor-element-10662f92 elementor-widget elementor-widget-heading" data-id="10662f92" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Cost-Effective Solution
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-32fc7088 elementor-widget elementor-widget-text-editor" data-id="32fc7088" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Even though organizations that are transforming to hybrid elections may experience increased costs through the transition period as voters are presented with the option to vote remotely online and/or arrive in-person to vote on paper, it provides the option to gradually narrow down the in-person operations and move online entirely, thus saving costs in the long run. Organizations that are able to move to online voting immediately enjoy the benefits of lower-cost elections right from the start.</p><p>Deploying online elections also allows EPI to rely less on expensive human operations to print, deliver and count complex paper ballots in their client elections, in turn, allowing them to onboard more new clients with minimal operations and support.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-2e749530 elementor-widget elementor-widget-heading" data-id="2e749530" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">In Conclusion
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-4a385e82 elementor-widget elementor-widget-text-editor" data-id="4a385e82" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							With 32 elections and over 250K voters served in 2022 only, Sequent continues to work closely with EPI in delivering dependable, safe, and affordable hybrid or fully online elections that meet the expectations of their clients.

<i>“Integrating Sequent’s solution with our existing uniWAHL voting products was a good choice. It empowers our customers to run hybrid or fully online elections while dramatically reducing their overall election cost and logistics.” </i>– Lars Riemenschneider, CEO – Electric Paper Wahlsysteme, Germany.						</div>
				</div>
				</div>
					</div>
				</div>
				</div>
		<p>The post <a href="/case-study/bringing-sequents-end-to-end-verifiable-voting-solution-to-the-german-market/">Bringing Sequent’s End-To-End Verifiable Voting Solution to the German Market</a> appeared first on <a href="/">Sequent</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Calling Go Code From Rust: A Google Trillian Story</title>
		<link>/tech/calling-go-code-from-rust-a-google-trillian-story/</link>
		
		<dc:creator><![CDATA[Serhii Bohynia]]></dc:creator>
		<pubDate>Sun, 22 Jan 2023 05:32:34 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[blog]]></category>
		<guid isPermaLink="false">/?p=1979</guid>

					<description><![CDATA[<p>Although we have not officially announced any specific plan, it’s not a secret that at Sequent we’re developing our 2nd generation secure voting platform, because we work out there in the open. Go Back Blog Add a header to begin generating the table of contents The bulletin board and its requirements Although we have not officially [&#8230;]</p>
<p>The post <a href="/tech/calling-go-code-from-rust-a-google-trillian-story/">Calling Go Code From Rust: A Google Trillian Story</a> appeared first on <a href="/">Sequent</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1979" class="elementor elementor-1979" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-2d77ab4a e-flex e-con-boxed e-con e-parent" data-id="2d77ab4a" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-297e0a57 elementor-widget elementor-widget-text-editor" data-id="297e0a57" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Although we have not officially announced any specific plan, it’s not a secret that at Sequent we’re developing our 2nd generation secure voting platform, because <a href="http://github.com/sequentech/">we work out there in the open</a>.</p>						</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-6d3fcb8e e-flex e-con-boxed e-con e-parent" data-id="6d3fcb8e" data-element_type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-4ec283d4 e-con-full e-flex elementor-invisible e-con e-child" data-id="4ec283d4" data-element_type="container" data-settings="{&quot;animation&quot;:&quot;fadeInLeft&quot;}">
				<div class="elementor-element elementor-element-2d2a5ed4 elementor-widget elementor-widget-button" data-id="2d2a5ed4" data-element_type="widget" data-widget_type="button.default">
				<div class="elementor-widget-container">
					<div class="elementor-button-wrapper">
			<a class="elementor-button elementor-button-link elementor-size-sm" href="/blog/">
						<span class="elementor-button-content-wrapper">
						<span class="elementor-button-icon elementor-align-icon-left">
				<i aria-hidden="true" class="fas fa-angle-left"></i>			</span>
									<span class="elementor-button-text">Go Back</span>
					</span>
					</a>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-7a528e9a elementor-widget elementor-widget-heading" data-id="7a528e9a" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<div class="elementor-heading-title elementor-size-default">Blog</div>		</div>
				</div>
				<div class="elementor-element elementor-element-2fe7206f elementor-widget__width-inherit elementor-widget elementor-widget-theme-post-title elementor-page-title elementor-widget-heading" data-id="2fe7206f" data-element_type="widget" data-widget_type="theme-post-title.default">
				<div class="elementor-widget-container">
			<h1 class="elementor-heading-title elementor-size-default">Calling Go Code From Rust: A Google Trillian Story</h1>		</div>
				</div>
				<div class="elementor-element elementor-element-4f27bb27 elementor-widget elementor-widget-text-editor" data-id="4f27bb27" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<span>Blog</span>, <span>Technology</span>						</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-13c54f26 e-flex e-con-boxed e-con e-parent" data-id="13c54f26" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-5c7157eb e-con-full e-flex e-con e-child" data-id="5c7157eb" data-element_type="container">
				<div class="elementor-element elementor-element-675e170a uael-heading-align-left elementor-widget elementor-widget-uael-table-of-contents" data-id="675e170a" data-element_type="widget" data-settings="{&quot;heading_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;content_between_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:16,&quot;sizes&quot;:[]},&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;],&quot;scroll_offset&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_text_align&quot;:&quot;left&quot;,&quot;heading_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;sticky_offset&quot;:0,&quot;sticky_effects_offset&quot;:0}" data-widget_type="uael-table-of-contents.default">
				<div class="elementor-widget-container">
					<div class="uael-toc-main-wrapper" data-headings="h2,h3" >
			<div class="uael-toc-wrapper">
				<div class="uael-toc-header">
					<span class="uael-toc-heading elementor-inline-editing" data-elementor-setting-key="heading_title" data-elementor-inline-editing-toolbar="basic" ></span>
									</div>
								<div class="uael-toc-toggle-content">
					<div class="uael-toc-content-wrapper">
						
							<ul data-toc-headings="headings" class="uael-toc-list uael-toc-list-none" data-scroll="500" ></ul>
											</div>
				</div>
				<div class="uael-toc-empty-note">
					<span>Add a header to begin generating the table of contents</span>
				</div>
			</div>
					</div>
				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-6c496f9a e-con-full e-flex e-con e-child" data-id="6c496f9a" data-element_type="container">
				<div class="elementor-element elementor-element-dbdec27 elementor-widget elementor-widget-image" data-id="dbdec27" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="768" height="403" src="/wp-content/uploads/2024/03/3-1-768x403-1.png" class="attachment-full size-full wp-image-1980" alt="" srcset="/wp-content/uploads/2024/03/3-1-768x403-1.png 768w, /wp-content/uploads/2024/03/3-1-768x403-1-300x157.png 300w" sizes="(max-width: 768px) 100vw, 768px" />													</div>
				</div>
				<div class="elementor-element elementor-element-4c2c29d elementor-widget elementor-widget-heading" data-id="4c2c29d" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">The bulletin board and its requirements
</h2>		</div>
				</div>
		<div class="elementor-element elementor-element-68d829b3 e-flex e-con-boxed e-con e-child" data-id="68d829b3" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-3abdbbdc elementor-widget elementor-widget-text-editor" data-id="3abdbbdc" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p dir="auto">Although we have not officially announced any specific plan, it’s not a secret that at Sequent we’re developing our 2nd generation secure voting platform, because <a href="http://github.com/sequentech/">we work out there in the open</a>.</p><p dir="auto">One of the most critical pieces of our 2nd-gen platform will be the <a href="http://github.com/sequentech/bulletin-board">bulletin board</a>. In voting systems’ jargon, the bulletin board is a broadcast channel with memory that stores relevant election information such as cast votes, public keys and election results.</p><p dir="auto">What follows is a non-exhaustive list of the requirements we have for the bulletin board:</p><ol dir="auto"><li>Verifiability: It is <strong>tamper-evident append-only log</strong>. Added entries cannot be removed or modified, and this should be verifiable by third parties for transparency.</li><li><u>Authenticity</u>: All posts to the bulletin board must be authenticated, in this case with digital signatures.</li><li>Performance: It supports adding <strong>multi-gigabyte entries</strong>. Intermediate steps of the <a href="https://github.com/sequentech/braid">mixnet</a> <a href="https://sequentech.io/wp-content/uploads/2023/01/2021-09-22-proto-2-Sequent-Cryptographic-Protocol.pdf" rel="nofollow">cryptographic protocol</a> might include millions of votes. That’s gigabytes worth of data.</li><li>Performance: <strong>scales to +1K votes/second</strong>. A must for elections with hundreds of thousands or millions of voters. We want to store votes in the board while people are voting, to increase verifiability.</li><li>Storage: Board can be <strong>archived/retrieved as files</strong>. We want to be able to persist data easily using AWS S3 or similar. A board client should be able to use this bulletin board in read-only mode without having any other backend service running. Anyone should also be able to download easily the board a local copy and work transparently from it.</li><li>Compliance: <strong>Supports filtering entry data</strong> for <a href="https://gdpr-info.eu/art-17-gdpr/" rel="nofollow">compliance reasons like the right to be forgotten in GDPR</a> without compromising other requirements, in particular the verifiability of the tamper-evident log.</li><li>Language: <strong>Rust development</strong> – it’s the language we have chosen for our 2nd-gen platform.</li></ol><p dir="auto">This is a hard nut to crack with conflicting requirements. That’s one of the wonderful aspects of voting technology: working in challenging problems.</p><p dir="auto">We could debate what is the right technology to implement a bulletin board. There are different approaches others have tried, ranging from trying to use Ethereum or any other blockchain, using git as a simple and well-known hash-chain or perhaps using a database like PostgreSQL as the backend storage. None of those provide a satisfactory level of compliance with the requirements previously outlined. That might be the topic of some other post.</p><p dir="auto">We settled to use a <a href="https://github.com/google/trillian-examples/tree/master/serverless">serverless</a> <a href="https://github.com/google/trillian">Google Trillian</a>-based log. Which brings us to..</p>						</div>
				</div>
				<div class="elementor-element elementor-element-b6ee3c1 elementor-widget elementor-widget-heading" data-id="b6ee3c1" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">What is Google Trillian?
</h2>		</div>
				</div>
					</div>
				</div>
				<div class="elementor-element elementor-element-598c3e90 elementor-widget elementor-widget-text-editor" data-id="598c3e90" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p dir="auto">Long story short, Trillian is a tamper-evident log. Its <a href="https://github.com/google/trillian">github repository</a> description is <i>“A transparent, highly scalable and cryptographically verifiable data store.”</i> Trillian is written in Go Language, and it allows to register entries in a log that other can query, monitor and request inclusion of new entries. It’s transparent and tamper-evident because it stores the log using a <a href="https://en.wikipedia.org/wiki/Merkle_tree" rel="nofollow">Merkle Tree</a>, which is just a tree of hashes of data where the leaves are the entries, and it allows to efficiently add entries, verify entries order and inclusion, and compare an evolving tree of entries and see that two different tree snapshots are consistent, i.e. older entries are still there in the expected location.</p><p dir="auto">Google developed Trillian as a generic implementation of <a href="https://certificate.transparency.dev/" rel="nofollow">Certificate Transparency</a> (CT). If you are reading this blog post, you are using Certificate Transparency. Your web browser and millions of other web browsers use CT to verify that the digital certificate of any website using https have been logged in a publicly available and verifiable trillian-based log. The idea is that the browser will only accept certificates that everyone knows about because they are publicly logged. CT has 8.4B certificates logged so far. And counting. Cool technology indeed.</p><p dir="auto">As mentioned earlier, Google Trillian is just the generic implementation of CT, allowing to log any kind of entries, not just digital certificates. In our case, we will log election data.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-85a5d68 elementor-widget elementor-widget-heading" data-id="85a5d68" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Trillian serverless
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-51bf4031 elementor-widget elementor-widget-text-editor" data-id="51bf4031" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p dir="auto">We cannot use Google Trillian simply as a service, because it doesn’t comply with our requirements: it’s not performant enough either in the size of entries (doesn’t support multi-gigabyte entries) not in terms of speed (with MySQL it handles ~10-20 new entries per second). Also, the storage backend is typically mysql and to access the data, you need the trillian service running. </p><p dir="auto">We’ll be using trillian serverless instead. Instead of using Trillian as a service, we would be using some of the Trillian library code to create our own log. Trillian Serverless (TS) stores <a href="https://github.com/google/trillian-examples/tree/master/serverless/api/layout">everything as files</a>, and any client can just access the log this way – no need for a running backend server, other than a generic file server like AWS S3 or even Github Pages. Each entry will be stored as a file along with a set of tiles that represents the hash tree (Merkle Tree) of the log. Entries can easily be sized in gigabytes, and well, for small entries it’s performant enough as we will see. </p><p dir="auto">A small note about compliance and the right to be forgotten: if for any reason a specific entry needs to be password-protected or just not publicly available anymore, having a hash tree (Merkle Tree) with entries being the leaves of that tree and represented as files allows for checking consistency of the log, even inclusion of a specific entry, even when a specific entry data file is not publicly available anymore. This feature is not implemented yet though.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-a755cf2 elementor-widget elementor-widget-heading" data-id="a755cf2" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">C FFI, the gold standard in interoperability
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-7a681ab0 elementor-widget elementor-widget-text-editor" data-id="7a681ab0" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p dir="auto">At this point we know that we are implementing our Bulletin Board using Rust, but we will be calling a library written in Go. Rust has different kind of data structures than Go. Even though both are compiled and feature strong typing, Go uses a Garbage Collector for dynamically allocating and managing the lifetime of objects in the heap, while Rust uses ownership, the type system and the borrow checker instead. Is this even.. possible?</p><p dir="auto">Turns out it is. The reason is both can talk to each other using a common lower denominator: the C <a href="https://en.wikipedia.org/wiki/Foreign_function_interface" rel="nofollow">Foreign Function Interface (FFI)</a>, which is (excerpt from Wikipedia): <i>“A mechanism by which a program written in one programming language can call routines or make use of services written in another.”</i></p><p dir="auto">What we intend to do is to end up with a compiled binary, which is our bulletin board service implemented in Rust, that will include a statically linked Go library that provides a C-FFI interface. The binary will depend on little more than libc.</p><p dir="auto">For implementation purposes, we will be needing to understand how to translate in and out from and to C FFI both in Rust and Go. The way a function call from Rust to Go will usually happen is:</p><ol dir="auto"><li><strong>Rust function</strong>: We have some Rust code that needs to call the functionality provided by Go. We call the Rust wrapper function that provides access to that functionality.</li><li><strong>Rust Wrapper function</strong>: Our Rust wrapper function converts Rust data structures to data structures that can be managed and understood by the C FFI. After conversion, this wrapper will call a C FFI function provided by our static Go library.</li><li><strong>Go Wrapper function</strong>: Our Go wrapper function provides an interface for that C FFI function, and this Go function receives the call from previous step. The first thing this wrapper function does is converting the input data to data structures managed by Go and easy to work with in Go, and then starts working with this input data.</li><li><strong>Go function</strong>: Our Go function calls whatever Go functions with the input data (in our case, from Trillian) obtaining some data that needs to be returned, and returns this to the Go wrapper function.</li><li><strong>Go Wrapper function</strong>: Our Go wrapper code converts these Go output data structures to something that can be returned through the C FFI interface.</li><li><strong>Rust Wrapper function</strong>: The output data is received by the Rust wrapper code and is converted into Rusty data structures.</li><li><strong>Rust function</strong>: The Rust wrapper code returns to the initial Rust function that uses this output data and goes on with life.</li></ol>						</div>
				</div>
				<div class="elementor-element elementor-element-1d7d9f0 elementor-widget elementor-widget-heading" data-id="1d7d9f0" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">How to actually do this?
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-6f1a07a6 elementor-widget elementor-widget-text-editor" data-id="6f1a07a6" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p dir="auto">If you need to call Go code from Rust, unfortunately there’s not much documentation out there and what you can find is quite scattered along the tubes. Here is a bunch of references that I found useful:</p><ul dir="auto"><li><a href="https://go.dev/blog/cgo" rel="nofollow">https://go.dev/blog/cgo</a></li><li><a href="https://pkg.go.dev/cmd/cgo" rel="nofollow">https://pkg.go.dev/cmd/cgo</a></li><li><a href="https://pkg.go.dev/unsafe#Slice" rel="nofollow">https://pkg.go.dev/unsafe#Slice</a></li><li><a href="https://belski.me/blog/foreign-function-interface-in-rust-and-go/" rel="nofollow">https://belski.me/blog/foreign-function-interface-in-rust-and-go/</a></li><li><a href="https://doc.rust-lang.org/nomicon/ffi.html" rel="nofollow">https://doc.rust-lang.org/nomicon/ffi.html</a></li><li><a href="https://users.rust-lang.org/t/preparing-an-array-of-structs-for-ffi/33411" rel="nofollow">https://users.rust-lang.org/t/preparing-an-array-of-structs-for-ffi/33411</a></li></ul><p dir="auto"><br />Since our project includes some other advanced techniques like passing structs from Rust to Go and back, you might also be interested in just taking a look at our <a href="https://github.com/sequentech/bulletin-board/">bulletin board</a>.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-4322ac6 elementor-widget elementor-widget-heading" data-id="4322ac6" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">How to actually do this?
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-3668bb8 elementor-widget elementor-widget-text-editor" data-id="3668bb8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p dir="auto">This is becoming a bit of a long post, so we will mention a couple of the interesting bits which might not be particularly well documented and I found particularly interesting:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-5af1c66f elementor-widget elementor-widget-heading" data-id="5af1c66f" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Integrated builds of Go and Rust
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-26351e46 elementor-widget elementor-widget-text-editor" data-id="26351e46" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<div class="elementor-element elementor-element-fa3ef44 elementor-widget elementor-widget-text-editor" data-id="fa3ef44" data-element_type="widget" data-widget_type="text-editor.default"><div class="elementor-widget-container"><p dir="auto">One of the most annoying things during this endeavour is the manual work of just building. How do you approach build both? Do you create a distinct package for the Go code? While changing both Go and Rust code, do you always manually first compile the Go code and then build with <code>cargo build</code>?</p><p dir="auto">Our approach was: <strong>build Go code automatically, from cargo</strong>. You can do this using the <a href="https://doc.rust-lang.org/cargo/reference/build-scripts.html" rel="nofollow">build scripts</a> through <code>build.rs</code>.</p></div></div>						</div>
				</div>
				<div class="elementor-element elementor-element-a66f0e9 elementor-widget elementor-widget-code-highlight" data-id="a66f0e9" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-rust line-numbers">
				<code readonly="true" class="language-rust">
					<xmp>fn main() {
    // Instruct cargo that if these files change, it needs to
    // rerun this script
    println!("cargo:rerun-if-changed=trillian-board/main.go");
    println!("cargo:rerun-if-changed=trillian-board/go.sum");

    // Build the go static library
    run_command(vec![
        "go", "build", "-buildmode=c-archive",
        "-o", "libtrillian_board.a", "main.go"
    ], cwd="./trillian-board/");

    // Instruct cargo to statically link to the just-build
    // static library `libtrillian_board.a`
    println!("cargo:rustc-link-lib=static=trillian_board");
}</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-dcd9d71 elementor-widget elementor-widget-text-editor" data-id="dcd9d71" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p dir="auto">Note that this is just some sample Rust pseudo-code. For the real life nitty-gritty details, take a look at our actual <a href="https://github.com/sequentech/bulletin-board/blob/main/build.rs"><code>build.rs</code> file</a> in <a href="https://github.com/sequentech/bulletin-board/">sequentech/bulletin-board</a> repository.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-29365cc2 elementor-widget elementor-widget-heading" data-id="29365cc2" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Performantly passing big data arrays from Rust to Go
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-3a8b37f8 elementor-widget elementor-widget-text-editor" data-id="3a8b37f8" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p dir="auto">After looking at the 6 steps of calling Go code from Rust, it’s difficult not to have concerns about performance when having so many intermediate steps just to do a simple function call. The real truth is that obviously performance is not as good as just using Rust code, but on the other hand in some cases it’s not as bad as it looks.</p><p dir="auto">When creating new entries, we need to pass the entry data (remember, potentially gigabytes of information) to the Go code. In our current work-in-progress version of the system, we do all that with heap-allocated Rust array.</p><p dir="auto"><a href="https://users.rust-lang.org/t/preparing-an-array-of-structs-for-ffi/33411/2" rel="nofollow">Following a suggestion in Stack Overflow</a>, we found a way to convert a Rust Array to a C FFI owned array:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-94b1ce4 elementor-widget elementor-widget-code-highlight" data-id="94b1ce4" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-rust line-numbers">
				<code readonly="true" class="language-rust">
					<xmp>fn vec_to_cffi_array<t>(input: Vec<t>) -> (*mut T, usize) {
    let boxed_slice: Box = input.into_boxed_slice();
    let length = boxed_slice.len();
    let fat_ptr: *mut [T] = Box::into_raw(boxed_slice);
    let slim_ptr: *mut T = fat_ptr as _;
    return (slim_ptr, length);
}</t></t></xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-dd32b66 elementor-widget elementor-widget-text-editor" data-id="dd32b66" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p dir="auto">Apart from allocating a variable holding the length of the array as part of the returning tuple, there’s no extra memory allocation – we are just dancing with the type system, but in the end we simply convert the <code>Vec&lt;T&gt;</code> into a pointer. The receiver will now be in charge of managing the allocated memory though. More on that later.</p><p dir="auto">BTW we also needed the <a href="https://github.com/sequentech/bulletin-board/blob/main/src/backend_trillian.rs#L230">reverse function (from C FFI Array to rust)</a>: also possible with no big memory allocations.</p><p dir="auto">How to use this data array in Go? Well, that turned out to be easy. Just use <a href="https://pkg.go.dev/unsafe#Slice" rel="nofollow"><code>unsafe.Slice</code></a>, <a href="https://github.com/sequentech/bulletin-board/blob/main/trillian-board/main.go#L242">like we do</a>:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-816baca elementor-widget elementor-widget-code-highlight" data-id="816baca" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-rust line-numbers">
				<code readonly="true" class="language-rust">
					<xmp>entries := unsafe.Slice(entriesC, numEntries)
</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-e951803 elementor-widget elementor-widget-text-editor" data-id="e951803" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p dir="auto">This code allows Go access the array as a <code>Slice</code> through the <code>entries</code> variable, indicating to Go that this is memory that the Go Garbage Collector does not need to manage itself. So at this point you need to remember to free the memory to avoid memory leaks. You can do that in Rust side or in Go side. We decided to go the rusty path, using a function like follows:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-f9c98d2 elementor-widget elementor-widget-code-highlight" data-id="f9c98d2" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard ">
			<pre data-line="" class="highlight-height language-rust line-numbers">
				<code readonly="true" class="language-rust">
					<xmp>fn free_vec<t>(ptr: *mut T, len: usize) {
    if ptr.is_null() {
        eprintln!("free_vec() errored: got NULL ptr!");
        ::std::process::abort();
    }
    let entries = unsafe { slice::from_raw_parts_mut(ptr, len) };
    drop(unsafe { Box::from_raw(entries) });
}</t></xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-62a2572 elementor-widget elementor-widget-text-editor" data-id="62a2572" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p dir="auto">The performance we get is pretty decent when adding entries to this trillian-based log. For small entries, we achieve more than a 1,000 separate inserts per second (sequence+integrate in Trillian terminology). That’s about 2 orders of magnitude more than the ordinary Trillian service that uses MySQL. Without any further optimization. Screenshot from our benchmark:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-5459f07 elementor-widget elementor-widget-image" data-id="5459f07" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="800" height="253" src="/wp-content/uploads/2024/03/bench-1536x486-1-1024x324.png" class="attachment-large size-large wp-image-1983" alt="" srcset="/wp-content/uploads/2024/03/bench-1536x486-1-1024x324.png 1024w, /wp-content/uploads/2024/03/bench-1536x486-1-300x95.png 300w, /wp-content/uploads/2024/03/bench-1536x486-1-768x243.png 768w, /wp-content/uploads/2024/03/bench-1536x486-1.png 1536w" sizes="(max-width: 800px) 100vw, 800px" />													</div>
				</div>
				<div class="elementor-element elementor-element-a4ec256 elementor-widget elementor-widget-heading" data-id="a4ec256" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Stay tuned
</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-0a545e9 elementor-widget elementor-widget-text-editor" data-id="0a545e9" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p dir="auto">There are other interesting insights, techniques and technologies we are using in our 2nd-gen platform that we might want to talk about in the future. For example, about how we generate reproducible builds with Nix or about all the Github Actions we have on every push that include from checking license of dependencies to automatic benchmarking. Stay tuned for more to come.</p><p dir="auto">In the meantime, you can play and tinker around with our work-in-progress and yet-to-be-released open source <a href="https://github.com/sequentech/bulletin-board/">bulletin board</a> right now, because with one click you can launch a fully working development environment (the exact same one we use) by launching it with Github Codespaces. Isn’t that wonderful? It feels like magic.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-85b7ff1 elementor-widget elementor-widget-image" data-id="85b7ff1" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="800" height="445" src="/wp-content/uploads/2024/03/codespaces-1536x853-1-1024x569.png" class="attachment-large size-large wp-image-1984" alt="" srcset="/wp-content/uploads/2024/03/codespaces-1536x853-1-1024x569.png 1024w, /wp-content/uploads/2024/03/codespaces-1536x853-1-300x167.png 300w, /wp-content/uploads/2024/03/codespaces-1536x853-1-768x427.png 768w, /wp-content/uploads/2024/03/codespaces-1536x853-1.png 1536w" sizes="(max-width: 800px) 100vw, 800px" />													</div>
				</div>
				</div>
					</div>
				</div>
				</div>
		<p>The post <a href="/tech/calling-go-code-from-rust-a-google-trillian-story/">Calling Go Code From Rust: A Google Trillian Story</a> appeared first on <a href="/">Sequent</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>A Universal Approach to Election Verification: An Opportunity for Increased Trust in Elections</title>
		<link>/tech/a-universal-approach-to-election-verification-an-opportunity-for-increased-trust-in-elections/</link>
		
		<dc:creator><![CDATA[Serhii Bohynia]]></dc:creator>
		<pubDate>Wed, 14 Dec 2022 05:42:11 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[blog]]></category>
		<guid isPermaLink="false">/?p=1994</guid>

					<description><![CDATA[<p>A voting system is termed end-to-end verifiable (E2EVV) if it provides procedures to check that all steps of the voting process are executed correctly. These procedures include both human executed as well as automated software checks. Because the verifiability of end-to-end verifiable voting systems is based on mathematical proofs, the corresponding checks take the form [&#8230;]</p>
<p>The post <a href="/tech/a-universal-approach-to-election-verification-an-opportunity-for-increased-trust-in-elections/">A Universal Approach to Election Verification: An Opportunity for Increased Trust in Elections</a> appeared first on <a href="/">Sequent</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="1994" class="elementor elementor-1994" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-75001990 e-flex e-con-boxed e-con e-parent" data-id="75001990" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-54c7d920 elementor-widget elementor-widget-text-editor" data-id="54c7d920" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>A voting system is termed end-to-end verifiable (E2EVV) if it provides procedures to check that all steps of the voting process are executed correctly. These procedures include both human executed as well as automated software checks. Because the verifiability of end-to-end verifiable voting systems is based on mathematical proofs, the corresponding checks take the form of software components that mechanically verify these proofs generated by the system during a voting process.</p>						</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-6a7ccf4 e-flex e-con-boxed e-con e-parent" data-id="6a7ccf4" data-element_type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-65851c94 e-con-full e-flex elementor-invisible e-con e-child" data-id="65851c94" data-element_type="container" data-settings="{&quot;animation&quot;:&quot;fadeInLeft&quot;}">
				<div class="elementor-element elementor-element-5331ab4b elementor-widget elementor-widget-button" data-id="5331ab4b" data-element_type="widget" data-widget_type="button.default">
				<div class="elementor-widget-container">
					<div class="elementor-button-wrapper">
			<a class="elementor-button elementor-button-link elementor-size-sm" href="/blog/">
						<span class="elementor-button-content-wrapper">
						<span class="elementor-button-icon elementor-align-icon-left">
				<i aria-hidden="true" class="fas fa-angle-left"></i>			</span>
									<span class="elementor-button-text">Go Back</span>
					</span>
					</a>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-7baed687 elementor-widget elementor-widget-heading" data-id="7baed687" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<div class="elementor-heading-title elementor-size-default">Blog</div>		</div>
				</div>
				<div class="elementor-element elementor-element-36662e5b elementor-widget__width-inherit elementor-widget elementor-widget-theme-post-title elementor-page-title elementor-widget-heading" data-id="36662e5b" data-element_type="widget" data-widget_type="theme-post-title.default">
				<div class="elementor-widget-container">
			<h1 class="elementor-heading-title elementor-size-default">A Universal Approach to Election Verification: An Opportunity for Increased Trust in Elections</h1>		</div>
				</div>
				<div class="elementor-element elementor-element-7f86b9ad elementor-widget elementor-widget-text-editor" data-id="7f86b9ad" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<span>Blog</span>, <span>Technology</span>						</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-545cac82 e-flex e-con-boxed e-con e-parent" data-id="545cac82" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-476e8b9a e-con-full e-flex e-con e-child" data-id="476e8b9a" data-element_type="container">
				<div class="elementor-element elementor-element-1d291d9a uael-heading-align-left elementor-widget elementor-widget-uael-table-of-contents" data-id="1d291d9a" data-element_type="widget" data-settings="{&quot;heading_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;content_between_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:16,&quot;sizes&quot;:[]},&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;],&quot;scroll_offset&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_text_align&quot;:&quot;left&quot;,&quot;heading_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;sticky_offset&quot;:0,&quot;sticky_effects_offset&quot;:0}" data-widget_type="uael-table-of-contents.default">
				<div class="elementor-widget-container">
					<div class="uael-toc-main-wrapper" data-headings="h2,h3" >
			<div class="uael-toc-wrapper">
				<div class="uael-toc-header">
					<span class="uael-toc-heading elementor-inline-editing" data-elementor-setting-key="heading_title" data-elementor-inline-editing-toolbar="basic" ></span>
									</div>
								<div class="uael-toc-toggle-content">
					<div class="uael-toc-content-wrapper">
						
							<ul data-toc-headings="headings" class="uael-toc-list uael-toc-list-none" data-scroll="500" ></ul>
											</div>
				</div>
				<div class="uael-toc-empty-note">
					<span>Add a header to begin generating the table of contents</span>
				</div>
			</div>
					</div>
				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-6a76f0ea e-con-full e-flex e-con e-child" data-id="6a76f0ea" data-element_type="container">
				<div class="elementor-element elementor-element-3b83c11a elementor-widget elementor-widget-image" data-id="3b83c11a" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="768" height="403" src="/wp-content/uploads/2024/03/large-case-study-768x403-1.png" class="attachment-full size-full wp-image-1995" alt="" srcset="/wp-content/uploads/2024/03/large-case-study-768x403-1.png 768w, /wp-content/uploads/2024/03/large-case-study-768x403-1-300x157.png 300w" sizes="(max-width: 768px) 100vw, 768px" />													</div>
				</div>
				<div class="elementor-element elementor-element-54c0f14 elementor-widget elementor-widget-heading" data-id="54c0f14" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Introduction</h2>		</div>
				</div>
		<div class="elementor-element elementor-element-5ec388c8 e-flex e-con-boxed e-con e-child" data-id="5ec388c8" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-51148090 elementor-widget elementor-widget-text-editor" data-id="51148090" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>A voting system is termed end-to-end verifiable (E2EVV) if it provides procedures to check that all steps of the voting process are executed correctly. These procedures include both human executed as well as automated software checks. Because the verifiability of end-to-end verifiable voting systems is based on mathematical proofs, the corresponding checks take the form of software components that mechanically verify these proofs generated by the system during a voting process.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-9163a20 elementor-widget elementor-widget-text-editor" data-id="9163a20" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Ideally, these verification tools, which we call verifiers, should be written independently of the system they verify, by people not associated with it. This independence, both of software as well as of people, increases the confidence in the verification process, for technical as well as trust reasons.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-db76f90 elementor-widget elementor-widget-text-editor" data-id="db76f90" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>In practice, providers of E2EVV systems, which range from academic projects to commercial vendors, do not dedicate sufficient resources to ensure that these independent tools and procedures are developed. This is not surprising, because this development is expensive, even more so if done in an independent and principled (with the least amount of assumptions beyond mathematical specifications) way. Moreover, the incentives to dedicate these resources are not in place: <i>there exist no agreed upon precise technical standards that the population at large can use to evaluate to what degree systems are indeed E2EVV</i>. Consequently it is unclear what the return on investment for efforts to meet high standards in this area, including quality verifiers, are.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-066a7be elementor-widget elementor-widget-text-editor" data-id="066a7be" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>At the same time, many existing E2EVV systems share a substantial amount of commonality in the mathematical fundamentals at the base of their verifiability. Indeed, one can classify most E2EVV systems into very few classes according to the main cryptographic techniques they employ. The most cited examples are mixnets, homomorphic tallying, and blind signatures.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-cd5d118 elementor-widget elementor-widget-heading" data-id="cd5d118" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">A Universal Verifier
</h2>		</div>
				</div>
					</div>
				</div>
				<div class="elementor-element elementor-element-1cd84e77 elementor-widget elementor-widget-text-editor" data-id="1cd84e77" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>The combination of these two observations naturally suggests an opportunity to improve the current state of affairs: if most E2EVV systems share substantial underlying technology, it is possible that this commonality could be exploited to achieve a high quality universal verifier compatible with all of them. This universal verifier would be a joint effort from all E2EVV players, in effect being independent of each provider individually. But the benefits of such a project are not limited to improving the state of election verification software.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-5452555 elementor-widget elementor-widget-text-editor" data-id="5452555" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>The work necessary to define and develop a universal verifier for these systems would constitute the first steps towards the definition of precise standards defining and potentially certifying what an E2EVV system is. This is because in order to develop a universal verifier one needs to define verification very precisely (to the point of mechanical execution) and in sufficient generality (to be compatible across all instances of E2EVV). The long term outcome of these first steps would be a robust, rigorous and precise technical standard that would elevate the practices of all participants and instantiations of E2EVV voting. But because there are already benefits in providing a universal verifier compatible with existing systems today, it could be possible to bootstrap a standardisation process without a huge initial investment.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-c92ccf1 elementor-widget elementor-widget-heading" data-id="c92ccf1" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">First steps</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-733aed55 elementor-widget elementor-widget-text-editor" data-id="733aed55" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>The first step in the path towards a universal verifier supporting arbitrary E2EVV systems is to identify a small selection (say 2 or 3) of E2EVV systems currently in use and to develop a prototype that targets them. As a proof of concept this would serve to remove uncertainty from some of the fundamental problems a full fledged universal verifier could present, for example:</p><p> </p><ol><li aria-level="1">Whether it is possible to extract sufficient commonality in underlying mathematical constructions to make a universal verifier generally applicable.</li></ol><p> </p><ol><li aria-level="1">Whether it is possible to extract sufficient commonality in implementations to make a universal verifier viable from the perspective of software complexity. This includes the question of whether the last mile effort to adapt a universal verifier to a particular system constitutes a sufficiently small fraction of total effort.</li></ol><p> </p><ol><li aria-level="1">Whether existing E2EVV system authors and vendors are receptive to collaborating on a universal verifier (and using it as part of their complete solution), as well as participating in the possible standards emerging in the longer term.</li></ol><p> </p><p>Ideally many of these questions would be clarified during the initial stages of a prototype development as well as discussions with relevant parties</p>						</div>
				</div>
				</div>
					</div>
				</div>
				</div>
		<p>The post <a href="/tech/a-universal-approach-to-election-verification-an-opportunity-for-increased-trust-in-elections/">A Universal Approach to Election Verification: An Opportunity for Increased Trust in Elections</a> appeared first on <a href="/">Sequent</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>E-Voting Wasm Cryptography</title>
		<link>/tech/e-voting-wasm-cryptography/</link>
		
		<dc:creator><![CDATA[Serhii Bohynia]]></dc:creator>
		<pubDate>Wed, 07 Dec 2022 07:46:37 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[blog]]></category>
		<guid isPermaLink="false">/?p=2034</guid>

					<description><![CDATA[<p>The Sequent Voting Platform is an open-source E2EV internet voting system currently used in private organisations and non-legally binding elections of public organisations. The system employs standard cryptographic techniques following in the steps of well-established voting schemes proposed in the academic literature. We demo core cryptographic components that are being developed for the next generation [&#8230;]</p>
<p>The post <a href="/tech/e-voting-wasm-cryptography/">E-Voting Wasm Cryptography</a> appeared first on <a href="/">Sequent</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="2034" class="elementor elementor-2034" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-32160e6 e-flex e-con-boxed e-con e-parent" data-id="32160e6" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-9ba4bc5 elementor-widget elementor-widget-text-editor" data-id="9ba4bc5" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>The Sequent Voting Platform is an open-source E2EV internet voting system currently used in private organisations and non-legally binding elections of public organisations. The system employs standard cryptographic techniques following in the steps of well-established voting schemes proposed in the academic literature.</p><p>We demo core cryptographic components that are being developed for the next generation of Sequent’s platform. The main novelty demonstrated is the execution of (heavyweight) cryptographic operations in the browser, in a performant way. Potential applications of this technique are listed and possible benefits for security, privacy and verifiability are suggested. </p>						</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-31288e03 e-flex e-con-boxed e-con e-parent" data-id="31288e03" data-element_type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-21bbe259 e-con-full e-flex elementor-invisible e-con e-child" data-id="21bbe259" data-element_type="container" data-settings="{&quot;animation&quot;:&quot;fadeInLeft&quot;}">
				<div class="elementor-element elementor-element-59162297 elementor-widget elementor-widget-button" data-id="59162297" data-element_type="widget" data-widget_type="button.default">
				<div class="elementor-widget-container">
					<div class="elementor-button-wrapper">
			<a class="elementor-button elementor-button-link elementor-size-sm" href="/blog/">
						<span class="elementor-button-content-wrapper">
						<span class="elementor-button-icon elementor-align-icon-left">
				<i aria-hidden="true" class="fas fa-angle-left"></i>			</span>
									<span class="elementor-button-text">Go Back</span>
					</span>
					</a>
		</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-5ec65e0a elementor-widget elementor-widget-heading" data-id="5ec65e0a" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<div class="elementor-heading-title elementor-size-default">Blog</div>		</div>
				</div>
				<div class="elementor-element elementor-element-32f586ae elementor-widget__width-inherit elementor-widget elementor-widget-theme-post-title elementor-page-title elementor-widget-heading" data-id="32f586ae" data-element_type="widget" data-widget_type="theme-post-title.default">
				<div class="elementor-widget-container">
			<h1 class="elementor-heading-title elementor-size-default">E-Voting Wasm Cryptography</h1>		</div>
				</div>
				<div class="elementor-element elementor-element-4a913ddf elementor-widget elementor-widget-text-editor" data-id="4a913ddf" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<span>Blog</span>, <span>Technology</span>						</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-238b42d9 e-flex e-con-boxed e-con e-parent" data-id="238b42d9" data-element_type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-592c0159 e-con-full e-flex e-con e-child" data-id="592c0159" data-element_type="container">
				<div class="elementor-element elementor-element-6e3a0ed2 uael-heading-align-left elementor-widget elementor-widget-uael-table-of-contents" data-id="6e3a0ed2" data-element_type="widget" data-settings="{&quot;heading_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;content_between_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:16,&quot;sizes&quot;:[]},&quot;sticky&quot;:&quot;top&quot;,&quot;sticky_on&quot;:[&quot;desktop&quot;,&quot;tablet&quot;],&quot;scroll_offset&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;scroll_offset_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_text_align&quot;:&quot;left&quot;,&quot;heading_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;heading_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;separator_bottom_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;content_between_space_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;sticky_offset&quot;:0,&quot;sticky_effects_offset&quot;:0}" data-widget_type="uael-table-of-contents.default">
				<div class="elementor-widget-container">
					<div class="uael-toc-main-wrapper" data-headings="h2,h3" >
			<div class="uael-toc-wrapper">
				<div class="uael-toc-header">
					<span class="uael-toc-heading elementor-inline-editing" data-elementor-setting-key="heading_title" data-elementor-inline-editing-toolbar="basic" ></span>
									</div>
								<div class="uael-toc-toggle-content">
					<div class="uael-toc-content-wrapper">
						
							<ul data-toc-headings="headings" class="uael-toc-list uael-toc-list-none" data-scroll="500" ></ul>
											</div>
				</div>
				<div class="uael-toc-empty-note">
					<span>Add a header to begin generating the table of contents</span>
				</div>
			</div>
					</div>
				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-684589af e-con-full e-flex e-con e-child" data-id="684589af" data-element_type="container">
				<div class="elementor-element elementor-element-5b63f20d elementor-widget elementor-widget-image" data-id="5b63f20d" data-element_type="widget" data-widget_type="image.default">
				<div class="elementor-widget-container">
													<img loading="lazy" decoding="async" width="768" height="403" src="/wp-content/uploads/2024/03/wasm-crypto-1-768x403-1.png" class="attachment-full size-full wp-image-2035" alt="" srcset="/wp-content/uploads/2024/03/wasm-crypto-1-768x403-1.png 768w, /wp-content/uploads/2024/03/wasm-crypto-1-768x403-1-300x157.png 300w" sizes="(max-width: 768px) 100vw, 768px" />													</div>
				</div>
		<div class="elementor-element elementor-element-af42deb e-flex e-con-boxed e-con e-child" data-id="af42deb" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-2a74a170 elementor-widget elementor-widget-text-editor" data-id="2a74a170" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>The Sequent Voting Platform is an open-source E2EV internet voting system currently used in private organisations and non-legally binding elections of public organisations. The system employs standard cryptographic techniques following in the steps of well-established voting schemes proposed in the academic literature.</p><p>We demo core cryptographic components that are being developed for the next generation of Sequent’s platform. The main novelty demonstrated is the execution of (heavyweight) cryptographic operations in the browser, in a performant way. Potential applications of this technique are listed and possible benefits for security, privacy and verifiability are suggested. </p>						</div>
				</div>
				<div class="elementor-element elementor-element-e5c68e0 elementor-widget elementor-widget-heading" data-id="e5c68e0" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Introduction</h2>		</div>
				</div>
					</div>
				</div>
				<div class="elementor-element elementor-element-3e370b99 elementor-widget elementor-widget-text-editor" data-id="3e370b99" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Like many other systems proposed in the literature, the closest ancestor in Sequent’s genealogy tree is <a href="https://www.usenix.org/legacy/event/sec08/tech/full_papers/adida/adida.pdf">Helios</a>[1] in its original mixnet variant. The most significant departures from that Helios design are the use of a threshold distributed key generation mechanism, described in <a href="https://www.cs.cornell.edu/courses/cs754/2001fa/129.PDF">Pedersen</a>[2] and featured in <a href="https://www.win.tue.nl/~berry/papers/euro97.pdf">CGS</a>[3] and Distributed <a href="https://members.loria.fr/VCortier/files/Papers/WPES2013.pdf">Helios</a>[4], and the use of a <a href="http://www.csc.kth.se/~terelius/TeWi10Full.pdf">Terelius-Wikstrom</a>[5] style mixnet rather than the <a href="https://link.springer.com/content/pdf/10.1007/3-540-49264-X_32.pdf">Sako-Kilian</a>[6] one. Other systems with which Sequent shares techniques are <a href="https://wombat.factcenter.org/">Wombat</a>[7] and <a href="https://eprint.iacr.org/2017/325">CHVote</a>[8]. </p><p>Research and development into Sequent’s next generation system is currently underway. Part of this effort has been centred around the use of <a href="https://www.rust-lang.org/">Rust</a>[9] as a core technology. One of the interesting aspects of this technology is its ability to target <a href="https://webassembly.org/">WebAssembly</a>[10] through the <a href="https://llvm.org/">LLVM</a>[11] toolchain. </p><p>Internet voting systems require the use of a client component with which voters select and encrypt their votes, typically in a browser. In the past, these components have been written in Javascript or related languages. These components replicate some of the cryptography (for example, ElGamal encryption) that later processes votes in the backend. The initial motivating factor for our investigation of Rust’s WebAssembly target was the possibility of merging this overlapping cryptography into a single unified codebase. But there are further interesting possibilities.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-fec7d96 elementor-widget elementor-widget-heading" data-id="fec7d96" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Applications</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-52cf8533 elementor-widget elementor-widget-heading" data-id="52cf8533" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Vote casting
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-6b727d99 elementor-widget elementor-widget-text-editor" data-id="6b727d99" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Voting client software can reuse common cryptography packaged in a library compiled to Wasm, eliminating duplication.</p><p>Suggested benefits:</p><ul><li aria-level="1">Security: A unified code base reduces the likelihood of mismatches between client and server cryptography, and reduces the attack surface. The amount of code that needs to be audited is also reduced.</li></ul><ul><li aria-level="1">Performance: Higher performance compared to Javascript implementations.</li></ul>						</div>
				</div>
				<div class="elementor-element elementor-element-41a5f00 elementor-widget elementor-widget-heading" data-id="41a5f00" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Ballot verification
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-2a232a1f elementor-widget elementor-widget-text-editor" data-id="2a232a1f" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Ballot verifiers implementing the Benaloh challenge can reuse common cryptography packaged in a library compiled to Wasm, eliminating duplication.</p><p>Suggested benefits: As above.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-f627269 elementor-widget elementor-widget-heading" data-id="f627269" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Election verification
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-9d745b9 elementor-widget elementor-widget-text-editor" data-id="9d745b9" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Election verification, usually carried out by specialised software that must be downloaded and configured, can be executed in the browser with no installation.</p><p>Suggested  benefits: </p><ul><li aria-level="1">Verifiability: Making election verification procedures significantly more usable can achieve higher rates of exercised verification, moving the “universal” part of universal verifiability closer to practice.</li></ul><p>Note that achieving performant implementations in this use case is particularly difficult as election verification involves compute intensive operations that a priori seem impossible in a browser. We have not listed performance as a benefit here as we are comparing with non-browser, native implementations; in other words, performance is a must-have rather than a benefit for this use case.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-6f7c004 elementor-widget elementor-widget-heading" data-id="6f7c004" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h3 class="elementor-heading-title elementor-size-default">Trustee protocols
</h3>		</div>
				</div>
				<div class="elementor-element elementor-element-61f1ffd elementor-widget elementor-widget-text-editor" data-id="61f1ffd" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Running full trustee nodes on the browser with reduced deployment, administration and training costs.</p><p>Suggested benefits:</p><p>Real world experience has taught us that one of the barriers to running mixnet-based elections with a larger number of independent trustees is the cost that these trustees must incur in terms of deployment, administration and training. This is especially true for elections with fewer resources in human capital and infrastructure. As a result, it is not always easy to procure independent trustees to assume this important responsibility.</p><p>Any objective that is presumably achieved through distribution into independent trustees could be achieved to a greater degree when some of the costs of this distribution are reduced. For example:</p><ul><li aria-level="1">Privacy: Ballot secrecy safeguards achieved through the distribution of private key material and mixing permutations would be achieved to a higher degree if more trustees participate.</li><li aria-level="1">Security: Correctness safeguards achieved through distribution of mixing and tallying  would be achieved to a higher degree if more trustees participate.</li></ul><p>See previous section regarding performance as a benefit.</p>						</div>
				</div>
				<div class="elementor-element elementor-element-62666ad9 elementor-widget elementor-widget-heading" data-id="62666ad9" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Demonstration</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-ccb59b7 elementor-widget elementor-widget-text-editor" data-id="ccb59b7" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>We choose to demonstrate the most complex scenario described above, as it’s a proof of concept that also validates the rest of the comparatively simpler use cases. We show how trustee operations, both shuffling and decryption, can be run in the browser. We will also show that the resulting performance numbers fall within the threshold of practical applicability in small to medium elections. </p><p>As stated previously, achieving performant mixing in the browser is a particularly difficult task: this requires cutting edge technology that is currently experimental. Additionally, the full security implications of applying these techniques have to be analysed in detail.</p><p>You can <a href="https://strand_github_pages.sequentech.io/demo.html">access the demo directly from your web browser here</a> [12] ** and you can also see a video of how the demo performs running in the browser below:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-8fab766 elementor-widget elementor-widget-video" data-id="8fab766" data-element_type="widget" data-settings="{&quot;video_type&quot;:&quot;hosted&quot;,&quot;controls&quot;:&quot;yes&quot;}" data-widget_type="video.default">
				<div class="elementor-widget-container">
			<style>/*! elementor - v3.21.0 - 26-05-2024 */
.elementor-widget-video .elementor-widget-container{overflow:hidden;transform:translateZ(0)}.elementor-widget-video .elementor-wrapper{aspect-ratio:var(--video-aspect-ratio)}.elementor-widget-video .elementor-wrapper iframe,.elementor-widget-video .elementor-wrapper video{height:100%;width:100%;display:flex;border:none;background-color:#000}@supports not (aspect-ratio:1/1){.elementor-widget-video .elementor-wrapper{position:relative;overflow:hidden;height:0;padding-bottom:calc(100% / var(--video-aspect-ratio))}.elementor-widget-video .elementor-wrapper iframe,.elementor-widget-video .elementor-wrapper video{position:absolute;top:0;right:0;bottom:0;left:0}}.elementor-widget-video .elementor-open-inline .elementor-custom-embed-image-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background-size:cover;background-position:50%}.elementor-widget-video .elementor-custom-embed-image-overlay{cursor:pointer;text-align:center}.elementor-widget-video .elementor-custom-embed-image-overlay:hover .elementor-custom-embed-play i{opacity:1}.elementor-widget-video .elementor-custom-embed-image-overlay img{display:block;width:100%;aspect-ratio:var(--video-aspect-ratio);-o-object-fit:cover;object-fit:cover;-o-object-position:center center;object-position:center center}@supports not (aspect-ratio:1/1){.elementor-widget-video .elementor-custom-embed-image-overlay{position:relative;overflow:hidden;height:0;padding-bottom:calc(100% / var(--video-aspect-ratio))}.elementor-widget-video .elementor-custom-embed-image-overlay img{position:absolute;top:0;right:0;bottom:0;left:0}}.elementor-widget-video .e-hosted-video .elementor-video{-o-object-fit:cover;object-fit:cover}.e-con-inner>.elementor-widget-video,.e-con>.elementor-widget-video{width:var(--container-widget-width);--flex-grow:var(--container-widget-flex-grow)}</style>		<div class="e-hosted-video elementor-wrapper elementor-open-inline">
					<video class="elementor-video" src="/wp-content/uploads/2024/03/evoting-wasm-cryptography-demo.mov" controls="" preload="metadata" controlsList="nodownload"></video>
				</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-5f398e9 elementor-widget elementor-widget-heading" data-id="5f398e9" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">Note</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-7fb148c elementor-widget elementor-widget-text-editor" data-id="7fb148c" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<div>This document was presented in its original form for the E-Vote-ID 2022 conference as a short paper for the Demo Session. You can find this short paper in the <a href="https://dspace.ut.ee/handle/10062/84432">E-Vote-ID 2022 proceedings</a> [13] at page 175. </div>						</div>
				</div>
				<div class="elementor-element elementor-element-df8f40e elementor-widget elementor-widget-heading" data-id="df8f40e" data-element_type="widget" data-widget_type="heading.default">
				<div class="elementor-widget-container">
			<h2 class="elementor-heading-title elementor-size-default">References</h2>		</div>
				</div>
				<div class="elementor-element elementor-element-3d372435 elementor-widget elementor-widget-text-editor" data-id="3d372435" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>[1] <a href="https://www.usenix.org/legacy/event/sec08/tech/full_papers/adida/adida.pdf">Helios: Web-based Open-Audit Voting</a><br />[2] <a href="https://www.cs.cornell.edu/courses/cs754/2001fa/129.PDF">Non-interactive and information-theoretic secure verifiable secret sharing</a><br />[3] <a href="https://www.win.tue.nl/~berry/papers/euro97.pdf">A secure and optimally efficient multi-authority election scheme<br /></a>[4] <a href="https://members.loria.fr/VCortier/files/Papers/WPES2013.pdf">Distributed ElGamal à la Pedersen: Application to Helios</a><br />[5] <a href="http://www.csc.kth.se/~terelius/TeWi10Full.pdf">Proofs of Restricted Shuffles<br /></a>[6] <a href="https://link.springer.com/content/pdf/10.1007/3-540-49264-X_32.pdf">Receipt-free mix-type voting scheme — a practical solution to the implementation of a voting booth<br /></a>[7a] <a href="https://wombat.factcenter.org/">Wombat Voting</a><br />[7b] <a href="http://www.cs.tau.ac.il/~amnon/Students/niko.farhi.pdf">An Implementation of Dual (Paper and Cryptographic) Voting System<br /></a>[8] <a href="https://eprint.iacr.org/2017/325">CHVote Protocol Specification</a><br />[9] <a href="https://www.rust-lang.org/">https://www.rust-lang.org/</a><br />[10] <a href="https://webassembly.org/">https://webassembly.org/</a><br />[11] <a href="https://llvm.org/">https://llvm.org/</a><br />[12] <a href="https://strand_github_pages.sequentech.io/demo.html">https://strand_github_pages.sequentech.io/demo.html</a><br />[13] <a href="https://dspace.ut.ee/handle/10062/84432">https://dspace.ut.ee/handle/10062/84432</a> (page 175)</p>						</div>
				</div>
				</div>
					</div>
				</div>
				</div>
		<p>The post <a href="/tech/e-voting-wasm-cryptography/">E-Voting Wasm Cryptography</a> appeared first on <a href="/">Sequent</a>.</p>
]]></content:encoded>
					
		
		<enclosure url="/wp-content/uploads/2024/03/evoting-wasm-cryptography-demo.mov" length="0" type="video/quicktime" />

			</item>
	</channel>
</rss>
