{"action":"created","issue":{"url":"https://api.github.com/repos/autocrypt/autocrypt/issues/61","repository_url":"https://api.github.com/repos/autocrypt/autocrypt","labels_url":"https://api.github.com/repos/autocrypt/autocrypt/issues/61/labels{/name}","comments_url":"https://api.github.com/repos/autocrypt/autocrypt/issues/61/comments","events_url":"https://api.github.com/repos/autocrypt/autocrypt/issues/61/events","html_url":"https://github.com/autocrypt/autocrypt/issues/61","id":235016899,"number":61,"title":"Some Background on Forward Error Correction to Correct Transcription Errors","user":{"login":"nwalfield","id":1164560,"avatar_url":"https://avatars3.githubusercontent.com/u/1164560?v=4","gravatar_id":"","url":"https://api.github.com/users/nwalfield","html_url":"https://github.com/nwalfield","followers_url":"https://api.github.com/users/nwalfield/followers","following_url":"https://api.github.com/users/nwalfield/following{/other_user}","gists_url":"https://api.github.com/users/nwalfield/gists{/gist_id}","starred_url":"https://api.github.com/users/nwalfield/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nwalfield/subscriptions","organizations_url":"https://api.github.com/users/nwalfield/orgs","repos_url":"https://api.github.com/users/nwalfield/repos","events_url":"https://api.github.com/users/nwalfield/events{/privacy}","received_events_url":"https://api.github.com/users/nwalfield/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/autocrypt/autocrypt/milestones/2","html_url":"https://github.com/autocrypt/autocrypt/milestone/2","labels_url":"https://api.github.com/repos/autocrypt/autocrypt/milestones/2/labels","id":2888603,"number":2,"title":"Future Specs","description":"","creator":{"login":"pbrunschwig","id":12988906,"avatar_url":"https://avatars2.githubusercontent.com/u/12988906?v=4","gravatar_id":"","url":"https://api.github.com/users/pbrunschwig","html_url":"https://github.com/pbrunschwig","followers_url":"https://api.github.com/users/pbrunschwig/followers","following_url":"https://api.github.com/users/pbrunschwig/following{/other_user}","gists_url":"https://api.github.com/users/pbrunschwig/gists{/gist_id}","starred_url":"https://api.github.com/users/pbrunschwig/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pbrunschwig/subscriptions","organizations_url":"https://api.github.com/users/pbrunschwig/orgs","repos_url":"https://api.github.com/users/pbrunschwig/repos","events_url":"https://api.github.com/users/pbrunschwig/events{/privacy}","received_events_url":"https://api.github.com/users/pbrunschwig/received_events","type":"User","site_admin":false},"open_issues":2,"closed_issues":0,"state":"open","created_at":"2017-11-05T15:07:01Z","updated_at":"2017-11-16T09:11:55Z","due_on":null,"closed_at":null},"comments":0,"created_at":"2017-06-10T17:45:32Z","updated_at":"2017-12-04T21:02:35Z","closed_at":null,"author_association":"CONTRIBUTOR","body":"When a user needs to transcribe some data, e.g., the automatically generated passphrase used when transferring a secret key between two devices, it may be useful to have forward error correction (FEC) to correct some transcription errors.\r\n\r\nNote: a simple FEC is used to detect transcription errors for IBANs, which has reduce routing errors by about 99.9% [1].  The FEC technique used in IBANs is very simple, but it only detects errors and doesn't correct them.  In this particular context, this is probably sufficient.\r\n\r\nThere are a bunch of different techniques, but given that autocrypt will be implemented many times, it is probably best to use something simple.\r\n\r\nOne popular FEC was described by Luigi Rizzo in [2].  A 2-clause BSD-licensed implementation accompanied the paper [3,4].  Rizzo describes the algorithm as simple and it only requires about 300 lines of C code (according to sloccount).  The code has been adopted by several projects include Tahoe-LAFS who provide a GPL-licensed improved version with Python and Haskell bindings [5].  According to Zooko [5], fecpp provides a BSD-based bit-compatible implementation [6].  There is apparently also a Java version [7].\r\n\r\n[1] https://en.wikipedia.org/wiki/International_Bank_Account_Number\r\n[2] http://pages.cs.wisc.edu/~suman/courses/740/papers/rizzo97ccr.pdf\r\n[3] http://info.iet.unipi.it/~luigi/fec.html\r\n[4] http://info.iet.unipi.it/~luigi/vdm98/vdm980702.tgz\r\n[5] https://github.com/tahoe-lafs/zfec\r\n[6] https://www.randombit.net/code/fecpp/\r\n[7] http://jamesclarke.net/notes/javafec"},"comment":{"url":"https://api.github.com/repos/autocrypt/autocrypt/issues/comments/349104301","html_url":"https://github.com/autocrypt/autocrypt/issues/61#issuecomment-349104301","issue_url":"https://api.github.com/repos/autocrypt/autocrypt/issues/61","id":349104301,"user":{"login":"RokerHRO","id":20441930,"avatar_url":"https://avatars2.githubusercontent.com/u/20441930?v=4","gravatar_id":"","url":"https://api.github.com/users/RokerHRO","html_url":"https://github.com/RokerHRO","followers_url":"https://api.github.com/users/RokerHRO/followers","following_url":"https://api.github.com/users/RokerHRO/following{/other_user}","gists_url":"https://api.github.com/users/RokerHRO/gists{/gist_id}","starred_url":"https://api.github.com/users/RokerHRO/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RokerHRO/subscriptions","organizations_url":"https://api.github.com/users/RokerHRO/orgs","repos_url":"https://api.github.com/users/RokerHRO/repos","events_url":"https://api.github.com/users/RokerHRO/events{/privacy}","received_events_url":"https://api.github.com/users/RokerHRO/received_events","type":"User","site_admin":false},"created_at":"2017-12-04T21:02:35Z","updated_at":"2017-12-04T21:02:35Z","author_association":"NONE","body":"If I understand the paper correctly, the encoding works only if the transmission has the following properties:\r\n1. the packets have a number/ID (e.g. 0 ... n). Sender & receiver know this 'n' and the number of redundancy packets 'k'.\r\n2. a packet is received either correctly or not at all\r\n3. the receiver knows which packets it got, which are lost during transmission.\r\nSo the receiver can recover the lost packets from the received packets (if the number of lost packets is smaller than the number of \"redundancy\" packets the sender added before).\r\nThat is not the case if a passphrase \"correct horse battery staple\" is mutilated into \"collect hoarse battery staple\". Of course, there are error-correcting codes that works also when the receiver does _not_ know which data is corrupt, but these codes require even more redundancy in the data. Even 1-bit error correction, e.h. the (7,4) Hamming code nearly double the length of the data. The BCH(15,7,4) code is able to correct 2-bit errors, but more than double the data size."}}
{"actor":{"display_login":"RokerHRO"}}