Slashdot Mirror


Sequoia Voting Systems Source Code Released

Mokurai sends a heads-up about Sequoia Voting Systems, which seems to have inadvertently released the SQL code for its voting databases. The existence of such code appears to violate Federal voting law: "Sequoia blew it on a public records response. ... They appear... to have just vandalized the data as valid databases by stripping the MS-SQL header data off, assuming that would stop us cold. They were wrong. The Linux 'strings' command was able to peel it apart. Nedit was able to digest 800-MB text files. What was revealed was thousands of lines of MS-SQL source code that appears to control or at least influence the logical flow of the election, in violation of a bunch of clauses in the FEC voting system rulebook banning interpreted code, machine modified code and mandating hash checks of voting system code." The code is all available for study or download, "the first time the innards of a US voting system can be downloaded and discussed publicly with no NDAs or court-ordered secrecy," notes Jim March of the Election Defense Alliance. Dig in and analyze.

38 of 406 comments (clear)

  1. To be honest... by Darkness404 · · Score: 5, Insightful

    To be honest shouldn't -any- code used to tally votes be released in the public domain for any US citizen?

    --
    Taxation is legalized theft, no more, no less.
    1. Re:To be honest... by selven · · Score: 5, Funny

      No, we need to have security! How the heck can a system be secure if everyone can see how it works and therefore how to crack it?! This stuff is simply too important to be left in the hands of the average citizen.

  2. So... by w0mprat · · Score: 4, Funny

    grep and find who should have won the election?

    --
    After logging in slashdot still does not take you back to the page you were on. It's been that way for 20 years.
  3. Open Source by bl4nk · · Score: 5, Insightful

    I really can't see why we can't have a government-commissioned open-source system developed and mandated for use for public voting functions.

    I absolutely hate the thought of my vote being inputted in to a closed magical-mystery box.

    1. Re:Open Source by wizardforce · · Score: 4, Insightful

      The last administration isn't around any more. This administration could set its self apart from the old one by requiring all voting system code be open-sourced. But I agree; the chances of that happening are not any better than under the old overlord.

      --
      Sigs are too short to say anything truly profound so read the above post instead.
  4. Re:What? by buswolley · · Score: 5, Insightful

    To make light of this does not do justice. This is potentially huge news.

    --

    A Good Troll is better than a Bad Human.

  5. Re:What? by whiplashx · · Score: 4, Informative

    Appears to control or at least influence the logical flow of the election

    What exactly does that mean?

    Means they suspect that the code for the actually tallying and evaluating ballots is in SQL. It is suggested that this violates the law for being dynamic and interpreted.

  6. Re:What? by Idefix97 · · Score: 5, Funny

    I for one welcome our Afghan overlords!

  7. Hyperbole much by icebike · · Score: 3, Interesting

    "code that appears to control or at least influence the logical flow of the election"

    Which means the uneducated inspecting strings saw things like:

    BAL_ID null
    -- 1 - show candidate on ballot (default)
    -- 0 - remove candidate from the ballot
    -- 2 - don't show candidate on the ballot, but reserve space for her on the layout

    All of which is perfectly benign when voters are not eligible to vote for certain candidates for any number of reasons.

    The more you read at the ultimate site more you realize the people digging thru this garbage know nothing about what they are reading, and not much about programming either.

    Just because you know how to run grep or strings does not mean you can use the data it reveals.

    --
    Sig Battery depleted. Reverting to safe mode.
    1. Re:Hyperbole much by Minwee · · Score: 5, Insightful

      The more you read at the ultimate site more you realize the people digging thru this garbage know nothing about what they are reading, and not much about programming either.

      You could have kept reading, you know.

      See also the 2002 edition of the "Voluntary Voting System Guide" published by the Federal Election Commission especially this bit in Volume 1:

      Self-modifying, dynamically loaded, or interpreted code is prohibited [...]

      The FEC standards say "prohibited". They do not say "Any self-modifying, dynamically loaded or interpreted code is only okay if someone who is a really good programmer says it is" or "Interpreted code is okey dokey as long as it isn't called all that often". If the database itself contains application code which modifies the database, then that's a problem. It doesn't matter what kind of code it is or how benign you think it is, it should not be there at all.

      If you would like to share your educated opinion where it matters, feel free to comment in the wiki. That's what it's there for.

    2. Re:Hyperbole much by ijakings · · Score: 4, Insightful

      It doesnt matter if its changeable on the fly or not. The law is No interpreted code. Guess what they found? Interpreted code. Ergo, the law has been broken. How much more simply can this be put, that you would get it?

    3. Re:Hyperbole much by sten+ben · · Score: 3, Informative

      Show me the section in federal law that cites wiki!

      OK, I'll quote this instead:

      "4.2.2 Software Integrity

      Self-modifying, dynamically loaded, or interpreted code is prohibited, except under the security provisions outlined in section 6.4.e [sic - see note below]. This prohibition is to ensure that the software tested and approved during the qualification process remains unchanged and retains its integrity. External modification of code during execution shall be prohibited. Where the development environment (programming language and development tools) includes the following features, the software shall provide controls to prevent accidental or deliberate attempts to replace executable code: ...

      IANAL, but that seems pretty clear cut. Maybe not in regards to the SQL, but as far as to what they mean.

    4. Re:Hyperbole much by theTerribleRobbo · · Score: 3, Insightful

      From the site:

      UPDATE 10/20/09 5:45pm Pacific Time: It appears the files were NOT VANDALIZED and will open in MS-SQL Server 2005. It also appears they did redact "code" to some degree. I'm still not clear on why there are thousands of lines of source code still left in there. I'm working on scoring a copy of SQL Server 2005 ASAP so I can look for myself. Check the discussion areas to follow along in realtime.

      Interesting.

    5. Re:Hyperbole much by amicusNYCL · · Score: 3, Interesting

      Nice one jackass, but I'm not a lawyer, I'm a programmer. It should be pretty goddamn clear to any novice that a stored procedure in MS SQL Server, which is what we're dealing with here, is most definitely interpreted code. The law clearly states that interpreted code is not allowed because of the obvious fact that it can easily be changed after the certification. They state that once the software is certified that there are no more compilers or linkers allowed in the onboard software and that the binaries should be able to have their checksum validated in the field to ensure it's the same software that was certified. Especially when the SQL code to create those same stored procedures ships with the product, as if the database itself is set up in the field.

      Now, I'm not a lawyer, but that seems pretty goddamn clear to me that a stored procedure in SQL Server does not meet those criteria.

      But, and I'm being honest here, I really want to hear your opinion on the matter, since mine doesn't matter, and is based on scary capital letters.

      --
      "Our two-party system is like a bowl of shit looking at itself in a mirror." - Lewis Black
    6. Re:Hyperbole much by JimMarch(equalccw) · · Score: 5, Informative

      First, I'm the guy that built that wiki page.

      Second, "code that defines races" can be used to alter results. I have a lot of experience playing with Diebold databases because we've had access to those since 2003 when Diebold left an FTP site open. If you swap the candidate ID numbers between two candidates in the Diebold database (run in MS-Access), you'll flip the election. In a heartbeat.

      It *appears* there's code present in this Sequoia database to do the same thing. Note the word "appears". The best way to find out, and the most MORAL way, was to put it up for public review.

      Risking exposure of our technical warts, sure. Still worth it. Check the discussion areas at the wiki - we're learning a hell of a lot, very quickly.

      But yes, it's true: I don't know MS-SQL, and nobody else at EDA does either. So we were faced with a choice: find a few people who did know it, pay 'em a bunch of donated money to write a formal report behind closed doors, or do a public review and exam even if that means exposing any mistakes we make, knowing they'll be caught pretty damn quick.

      Which was better?

  8. Re:What? by commodore64_love · · Score: 5, Insightful

    Anyone with half a brain realized converting from dumb paper ballots to "smart" electronic machines that could manipulate the votes was a Bad Idea (tm). Unfortunately that disqualifies most of our state politicians.

    --
    "I disapprove of what you say, but I will defend to the death your right to say it." - historian Evelyn Beatrice Hall
  9. Re:While redacting... by MichaelSmith · · Score: 3, Insightful


    votes[candidate]++;

  10. Re:What? by stinerman · · Score: 5, Insightful

    As my Software Engineering instructor said...

    Someone was thinking that voting was primarily a counting problem and had the idea that computers were excellent at counting, so computers would be excellent at registering votes.

    Of course, voting is minimally about counting, and from what we've seen even these clowns couldn't do that right.

  11. Re:you're wrong. by jonbryce · · Score: 3, Insightful

    How about this?

    You select your candidate / party / referendum option on screen.
    The computer prints out a ballot paper and records your vote.
    You put the ballot paper in the ballot box.
    The returning officer selects a sample of ballot boxes at random and checks them to the computer.

  12. Re:ha ha by Cryacin · · Score: 3, Funny

    Now does stripping the illusion of voting away make us more or less free

    Don't blame me! I voted for Kodos!

    --
    Science advances one funeral at a time- Max Planck
  13. Too early to start the scandalising by SlidingGlassDoor · · Score: 3, Insightful

    They may have violated the regulations, but it is still not clear that anything they did would have had any real impact. Best to wait and see what the analysis reveals.

  14. Re:you're wrong. by Anne+Honime · · Score: 5, Insightful

    Maybe it's a cultural thing, but I've never seen the necessity to complicate things any further than paper, pencil, double physical count. Cheap, no machines involved, fast. On a national election down here (about 15 million voters), voting booths close at 6pm and results are known nation wide right on time to open the 8pm evening news.

  15. This is cool and all, but... by thePowerOfGrayskull · · Score: 3, Insightful
    ... This is cool and all but.. BAL_ID null -- 1 - show candidate on ballot (default) -- 0 - remove candidate from the ballot -- 2 - don't show candidate on the ballot, but reserve space for -- her on the layout , IS_ON_BALLOT T_P_BOOL null -- Code used by State reports , STATE_CODE char(7) null -- Reference to AUDIO; clip used to describe candidate header -- in English , AUDIO_ID T_GLOBAL_ID null -- For grid style: which slate the candidate goes into , SLATE int null , constraint PK_CANDIDATE primary key clustered (CANDIDATE_ID) -- create indexes on table CANDIDATE Exec(" create index FK_CANDIDATE_AUDIO_FK on CANDIDATE (AUDIO_ID) Exec(" create index FK_CANDIDATE_CONTEST_FK on CANDIDATE (CONTEST_ID) If this is the worst of the "business logic" that "controls or influences the flow" of elections, I think they're in for a disappointing read. Using a value in a database isn't considered "business logic" hte last I checked.

    * t violates the federal rulebook on voting systems on several levels: the rules require that code be hash-checked to prove authenticity in the field for obvious reasons. If the real working code is buried in with the data, no such hash-checks are possible.

    Except that so far, I'm seeing table construction and table layouts. I guess that's technically code - as any SQL technically is - but a good case can be made to say that it's just the database structure. Which can, of course, be subjected to a hash check.

    The federal rulebook is also clear that code can't be interpreted, apparently to avoid modification "in the field" (generally county or city election offices).

    Well shit, in that case, they can't use SQL at all. Since a database is a fairly reasonable way to track the candidate data, display strings, etc... I'm pretty sure that this wasn't the intent of the law. (No, IANAL, just applying common sense).

    I do think it's great and long overdue that this information is now available. But I also think they'll want to finish the analysis and get some people who understand what they're looking at, before they start making claims. There may be validity to them - but so far it's tenuous if there at all. (Full disclosure: I'd love to electronic voting either a) shut down or preferably b) administered in a 100% transparent fashion... so I'm not making this post in anybody's defense)

    1. Re:This is cool and all, but... by Senjutsu · · Score: 5, Insightful

      Except that so far, I'm seeing table construction and table layouts. I guess that's technically code - as any SQL technically is - but a good case can be made to say that it's just the database structure. Which can, of course, be subjected to a hash check.

      Except that the DDL isn't in a bunch of scripts that are building the schema, the schema exists in a bunch of strings that are concatenated together in stored procedures with some arguments to the procs munged in, and passed to Exec statements when the stored procedures are run.

      That's not normal table building, that's an unabashedly self-modifying database.

    2. Re:This is cool and all, but... by itwerx · · Score: 3, Interesting

      "that's an unabashedly self-modifying database" Not to mention that ID 15 -> 21 re-mapping in one of the excerpts. Why would an ID of any kind ever need to be remapped on the fly like that? Heck, I used to do a little SQL programming back in the day, I might just have to dig into it a bit myself! :)

  16. Another case of failed redaction! by Anonymous Coward · · Score: 3, Informative

    The file they have is simply a SQL Server backup.
    It takes a few minutes to restore using SQL 2005 Express + SSMSE
    Nothing has been destroyed or sabotaged.

    but...

    When the database is restored you get the tables with the data in.
    All the stored procedures have been deleted. Or so Seqoia thought :)

    As the use of strings on the backup file demonstrates, the text of the sp's are still there.
    There are various database tools (Lumigent was one from memory) that allow looking back through the database log and, I expect, returning the database to a previous state.

    Just when companies had got the hang of cleaning up after track changes they move on to SQL database backups :)

  17. too much voting? by Anonymous Coward · · Score: 5, Informative

    Maybe it's a cultural thing, but I've never seen the necessity to complicate things any further than paper, pencil, double physical count. Cheap, no machines involved, fast. On a national election down here (about 15 million voters), voting booths close at 6pm and results are known nation wide right on time to open the 8pm evening news.

    Except that Americans like to vote on everything.

    Not just politicians, but sherifs, judges, district attorneys (i.e., head government prosecutors), etc. Add this to the fact that most elections (municipal, county, state, federal) tend to happen on one day, so that when you walk into the booth, you don't just have a piece of paper, but a small booklet to go through. Then add propositions (i.e., referendums) that many states have if enough people sign a petition. If you want to be an educated voter on all the possible choices you have to do some serious studying.

    And then you have to count all of these 20+ separate run offs for the various levels of government.

    1. Re:too much voting? by innocent_white_lamb · · Score: 3, Insightful

      Except that Americans like to vote on everything.
       
      And?
       
      If it's important enough to vote on, it's important enough to count properly.

      --
      If you're a zombie and you know it, bite your friend!
    2. Re:too much voting? by Purity+Of+Essence · · Score: 3, Insightful

      Have you ever seen voter turn-out numbers? Americans don't like to vote at all.

      --
      +0 Meh
  18. Re:There's somebody wrong on the internet... by CastrTroy · · Score: 3, Interesting

    I shouldn't be able to verify my own vote. If I can verify my vote, I can prove to myself after the fact how I voted, and therefore I can prove it to somebody else. That somebody else might try to coherce me into voting a specific way. I much prefer paper, pen, and hand counted. That way, I can verify the box is empty before everyone puts their vote in. Verify that my vote went into the box, and verify that the box was opened and that all votes in the box were counted correctly. I wouldn't be able to identify my ballot apart from the other ballots in the box, but that would be good, because nobody would be able to coherce me to vote a particular way. Just knowing that my vote was an a box, and that the box was counted correctly is enough for me to know that my vote was counted correctly.

    --

    Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
  19. Re:you're wrong. by SydShamino · · Score: 3, Insightful

    You are required to give your hash code to your boss. HE looks up your vote and picks A or B. 50-50 chance he picks the fake one and you live. 50-50 chance he picks the real one and you lose your job.

    --
    It doesn't hurt to be nice.
  20. How to restore the .bak file using Microsoft SQL.. by Anonymous Coward · · Score: 3, Informative

    How to restore the .bak file using Microsoft SQL Server Express 2008:

    Step 1. Go download SQL Server Express 2008 (This is trivial, left up to the reader. You might have to go to a microsoft webpage) and install.

    Step 2. Go download SQL Tools for SQL Server (Trivial) and install.

    Step 3. Go download the .bak.zip file from the above wiki. Save it to 'C:\foofoo\'. Unzip the .bak file within it to 'C:\foofoo\'. You should now have: 'C:\foofoo\RIV_20081104_Canvass_Final_dbset_E.bak'

    Step 4. Start up SQL Server Express

    Step 5. Open SQL Management Studio and connect to your local SQLEXPRESS instance.

    Step 6. Click on the top most node in (Should be your machine's name\SQLEXPRESS). Click "New Query".

    Step 7. Run the following query:

    RESTORE DATABASE RIV_20081104_E FROM disk='C:\foofoo\RIV_20081104_Canvass_Final_dbset_E.bak'
    WITH MOVE 'RIV_20081104_Esys' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\RIV_20081104_Esys.mdf',
              MOVE 'RIV_20081104_Edat' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\RIV_20081104_Edat.mdf',
              MOVE 'RIV_20081104_Elog' TO 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\RIV_20081104_Elog.ldf',
              REPLACE
    go

    Step 8. Wait.

    Step 9. This should create a database called RIV_20081104_E.

    Have fun.

  21. Re:you're wrong. by Anne+Honime · · Score: 3, Interesting

    Doesn't work like that, at least where I live. In my place, you can come in to check if the see-through box is empty and sealed before the voting begin. Then you have parties representatives that take turn to check the whole process during the day (and keep an eye on each others as well as looking after election judges), and finally, the public is much welcomed to come back (or even stay the whole day, if you prefer so) and help count the ballots at the end of the day. The result is then phoned at the town house, where all results for the town are tallied on a paperboard in front of the public. Through some administrative layers, it climbs up through counties and districts up to the national level. Nothing is ever done behind closed doors ; anybody has a right to attend every step physically, in person. In the end, it's a giant peer-reviewed open-source process that's happening under the very eyes of everybody. In the morning, through local newspapers, you can break down the full result down to every single voting place in the whole country.

  22. Re:you're wrong. by Wyzard · · Score: 3, Insightful

    Americans won't stand for it. They want to know NOW damnit, not tomorrow.

    I don't think the American public would really be all that upset if the election results didn't come in until the next morning. I suspect it's actually the news media that wants the results ASAP, in order to get everyone watching the election day evening news so that they can charge more for ad space.

  23. Re:you're wrong. by v1 · · Score: 3, Interesting

    Good catch, that's the sort of thinking I was hoping to hear from.

    OK then one more tweak. The receipt you print in the booth can either be your real or your dummy vote. You pick just before you leave. So if you are being coerced, you can pick the dummy receipt but if you want to watch over your vote you pick the real receipt to take home.

    So in this case you don't get an A/B choice when you get home and punch in the URL. It immediately shows a vote, either the dummy or the real, whichever you elected to get the receipt for.

    Are we bulletproof yet? That doesn't look like it adds any real complexity to what I'm trying to keep to a bare minimum.

    --
    I work for the Department of Redundancy Department.
  24. Re:Treason? by symbolset · · Score: 3, Funny

    This might hurt your feelings but: you're a Canadian. Most Americans don't consider you ever.

    --
    Help stamp out iliturcy.
  25. Re:What? by shentino · · Score: 3, Insightful

    The reason voting irregularities mean diddly squat in a presidential election is due to the fact that Joe Citizen's votes don't matter directly.

    Thanks to the electoral college, any voting irregularities are overruled by the imprimatur elector fiat.

  26. Re:There's somebody wrong on the internet... by David+Jao · · Score: 3, Insightful

    As a matter of due diligence, I will look up your "David Chaum's blind signature" (I may have already). I'm certain it will have a fatal flaw, as has every system I've examined thus far. It doesn't matter how many people jump up and down in support of their ideologies or how vigorously. Nobody has shown me a secret ballot, end-to-end verifiable voting system. I do not believe one exists. (I would like to be proven wrong, but I don't think anybody can.)

    Disclaimer: I am a cryptographer, and I have done research on topics related to electronic voting in the past.

    As a matter of simply stating a fact, regardless of your due diligence, the fact is that blind signatures and their application to electronic voting is a subject which is about 15 years old by now. If you didn't already know about this concept, then you are clearly not an expert in electronic voting or even in any related field of cryptology. Cryptographic electronic voting is a highly technical subject involving many different areas and subfields of cryptology, some of them heavily number theoretic and mathematical. You are probably not technically knowledgeable enough to pass judgment on such heavily technical subjects in which you are uninformed (or worse, prejudiced against, as evidenced by your choice use of words such as "ideologies").

    Even if I'm wrong about you, and you are technically knowledgeable enough to correctly evaluate cryptographic voting systems, it doesn't matter. For every one of you, there are thousands of other voters who are not technically knowledgeable, but who think that they are.

    The problem with voting systems is not mathematical. It is not cryptographic. From the point of view of cryptography, secret ballot, end-to-end verifiable voting systems do exist, and have been known for decades. Either a mix net or the Benaloh cryptosystem together with threshold secret sharing delegation of trust is all that is required. The problem with cryptographic end-to-end voting systems is that for every one cryptographer in the world, there are thousands of uninformed members of the general public who don't understand the math, and who think that the scheme is either untrustworthy or that they have found a flaw. For this reason, even if there is a secret ballot, end-to-end verifiable voting system (which there is), it will never be accepted by the general public. As a research scientist, I have had far too much experience in dealing with such obstacles. The public does not trust scientists, even when the scientists clearly know more than they do.