ADVERTISEMENT

Did Namfrel discover potential tampering in the Comelec vote counting machine?

Published Apr 24, 2022 08:57 am

NAMFREL’s Lito Averia couldn’t believe his eyes. Working into the early hours of the morning and fueled by massive amounts of coffee, Lito found a mismatch in the hashcodes of Comelec’s Vote Counting Machines (VCM).

This 64-character hashcode proves that the system code inside the VCMs was never altered. This hashcode acts much like a security seal, and if the seal is broken, there is a prima facie case for tampering. In other words, if the system code of Comelec’s Vote Counting machine were in any way changed, the hash code would be DIFFERENT. This is the original hashcode as published by Comelec:

So this “b” and “8” character difference raises the presumption that the system code WAS tampered with. Comelec’s reaction was to issue a certification here, saying there was a typo, and it even had an attachment from their vendor Pro V&V supporting this position.

Reactions from netizens:
“Hi, looking at all the info you have and what’s being discussed here. IDK why the hash was manually typed ¯_(ツ)_/¯ beats me. But it looks like it was typed manually lol. Any changes to the file or a string much as a character will create a completely unique hash. it will not change a 4 bits (half-a-byte). sha256 is 64chars.” — Jenny Mullhenny

“It’s probably a typo. An altered document, even by just 1 character, would result in an entirely different hash code and not differ only by 1 character as this case, that is assuming they were using a strong hash function”- Andres marianitojr

“My programmer self is crying of “typo error” reasoning of Comelec on hash discrepancy. Hash is system generated and not manually typed. Next time kung magrereport kayo, highlight+copy then paste na lang ah. Wag i-type!” -@ayekxanderr

“Could be a typo. I checked and found out that the hashcode is generated by the VCM and printed on a paper that looks like a cashier’s receipt. There is no other way to document the hashcode but to type it manually, di pwede ma copy and paste dahil naka print sa papel and the VCM is not connected to other machines for security.” — Art Samaniego Jr, MB Tech and Business Editor

Now this is a valid concern. It can also be exploited illegally in “controlled” precincts — William Emmanuel Yu, PPRCV’s Co-IT Director

The election is a “sacred rite” and as such “lahat ng pagduda dapat masagot ng Comelect at Smartmatic” — Luna

“Hahahashcode” — Niz Shinoda-Jørgensen

Call to Action:
Hanlon’s Razor comes to mind to explain this typo: “Never attribute to malice that which is adequately explained by stupidity.”

Still COMELEC could do more to allay the fears. NAMFREL calls on Comelec to re-run the compilation. The public needs to witness the output hashcode. This step was never done in the previous audits.

Background and full disclosure:
I stumbled upon this while interviewing Fernando Contreras Jr (Namfrel) to get their reactions to UP Vanguards’ 4-point recommendations to Comelec. Namfrel and BNSHosting.net (which this author manages) have commercial transactions.

ADVERTISEMENT
.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1561_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1562_widget.title }}

.most-popular .layout-ratio{ padding-bottom: 79.13%; } @media (min-width: 768px) and (max-width: 1024px) { .widget-title { font-size: 15px !important; } }

{{ articles_filter_1563_widget.title }}

{{ articles_filter_1564_widget.title }}

.mb-article-details { position: relative; } .mb-article-details .article-body-preview, .mb-article-details .article-body-summary{ font-size: 17px; line-height: 30px; font-family: "Libre Caslon Text", serif; color: #000; } .mb-article-details .article-body-preview iframe , .mb-article-details .article-body-summary iframe{ width: 100%; margin: auto; } .read-more-background { background: linear-gradient(180deg, color(display-p3 1.000 1.000 1.000 / 0) 13.75%, color(display-p3 1.000 1.000 1.000 / 0.8) 30.79%, color(display-p3 1.000 1.000 1.000) 72.5%); position: absolute; height: 200px; width: 100%; bottom: 0; display: flex; justify-content: center; align-items: center; padding: 0; } .read-more-background a{ color: #000; } .read-more-btn { padding: 17px 45px; font-family: Inter; font-weight: 700; font-size: 18px; line-height: 16px; text-align: center; vertical-align: middle; border: 1px solid black; background-color: white; } .hidden { display: none; }
function initializeAllSwipers() { // Get all hidden inputs with cms_article_id document.querySelectorAll('[id^="cms_article_id_"]').forEach(function (input) { const cmsArticleId = input.value; const articleSelector = '#article-' + cmsArticleId + ' .body_images'; const swiperElement = document.querySelector(articleSelector); if (swiperElement && !swiperElement.classList.contains('swiper-initialized')) { new Swiper(articleSelector, { loop: true, pagination: false, navigation: { nextEl: '#article-' + cmsArticleId + ' .swiper-button-next', prevEl: '#article-' + cmsArticleId + ' .swiper-button-prev', }, }); } }); } setTimeout(initializeAllSwipers, 3000); const intersectionObserver = new IntersectionObserver( (entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { const newUrl = entry.target.getAttribute("data-url"); if (newUrl) { history.pushState(null, null, newUrl); let article = entry.target; // Extract metadata const author = article.querySelector('.author-section').textContent.replace('By', '').trim(); const section = article.querySelector('.section-info ').textContent.replace(' ', ' '); const title = article.querySelector('.article-title h1').textContent; // Parse URL for Chartbeat path format const parsedUrl = new URL(newUrl, window.location.origin); const cleanUrl = parsedUrl.host + parsedUrl.pathname; // Update Chartbeat configuration if (typeof window._sf_async_config !== 'undefined') { window._sf_async_config.path = cleanUrl; window._sf_async_config.sections = section; window._sf_async_config.authors = author; } // Track virtual page view with Chartbeat if (typeof pSUPERFLY !== 'undefined' && typeof pSUPERFLY.virtualPage === 'function') { try { pSUPERFLY.virtualPage({ path: cleanUrl, title: title, sections: section, authors: author }); } catch (error) { console.error('ping error', error); } } // Optional: Update document title if (title && title !== document.title) { document.title = title; } } } }); }, { threshold: 0.1 } ); function showArticleBody(button) { const article = button.closest("article"); const summary = article.querySelector(".article-body-summary"); const body = article.querySelector(".article-body-preview"); const readMoreSection = article.querySelector(".read-more-background"); // Hide summary and read-more section summary.style.display = "none"; readMoreSection.style.display = "none"; // Show the full article body body.classList.remove("hidden"); } document.addEventListener("DOMContentLoaded", () => { let loadCount = 0; // Track how many times articles are loaded const offset = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // Offset values const currentUrl = window.location.pathname.substring(1); let isLoading = false; // Prevent multiple calls if (!currentUrl) { console.log("Current URL is invalid."); return; } const sentinel = document.getElementById("load-more-sentinel"); if (!sentinel) { console.log("Sentinel element not found."); return; } function isSentinelVisible() { const rect = sentinel.getBoundingClientRect(); return ( rect.top < window.innerHeight && rect.bottom >= 0 ); } function onScroll() { if (isLoading) return; if (isSentinelVisible()) { if (loadCount >= offset.length) { console.log("Maximum load attempts reached."); window.removeEventListener("scroll", onScroll); return; } isLoading = true; const currentOffset = offset[loadCount]; window.loadMoreItems().then(() => { let article = document.querySelector('#widget_1690 > div:nth-last-of-type(2) article'); intersectionObserver.observe(article) loadCount++; }).catch(error => { console.error("Error loading more items:", error); }).finally(() => { isLoading = false; }); } } window.addEventListener("scroll", onScroll); });

Sign up by email to receive news.