{"id":15395484,"url":"https://github.com/stef/macc","last_synced_at":"2025-09-08T03:37:08.183Z","repository":{"id":2718517,"uuid":"3713010","full_name":"stef/MACC","owner":"stef","description":"multi agent encrypted communication PoC","archived":false,"fork":false,"pushed_at":"2012-03-18T03:02:06.000Z","size":144,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-27T20:46:12.730Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stef.png","metadata":{"files":{"readme":"README.markdown","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-03-14T00:33:42.000Z","updated_at":"2023-09-08T16:32:35.000Z","dependencies_parsed_at":"2022-09-03T12:01:18.831Z","dependency_job_id":null,"html_url":"https://github.com/stef/MACC","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/stef/MACC","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stef%2FMACC","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stef%2FMACC/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stef%2FMACC/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stef%2FMACC/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stef","download_url":"https://codeload.github.com/stef/MACC/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stef%2FMACC/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274129389,"owners_count":25227236,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-08T02:00:09.813Z","response_time":121,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-01T15:28:30.260Z","updated_at":"2025-09-08T03:37:08.162Z","avatar_url":"https://github.com/stef.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"Simple Multi-agent encryption\n\nNOTICE: This is an experimental tool, it is a proof-of-concept, it provides only local communication.\n(You could however easily hack this to make it work over irc, using ii and nc for example...)\n\nDependencies\n\n    apt-get install seccure apg ksh\n\nRUNNING THE PoC\n\n    # Running the \"broadcast channel\" simulator :)\n    cd server\n    sh ./multiplexer.sh\n\n    # Running agents - as many as you want\n\n    # open a new shell,\n    # create a pristine directory for an agent\n    mkdir -p agent1\n    cd agent1/\n    macc.sh \u003cpath to server\u003e # run an agent\n\nOn 1st run this automatically generates a private/public keypair. Exchange the public part with your peers and add to a file called peers prefixed with some nickname. For the user agent1/peers should look like this:\n\n    agent2 \u003clong random string, which is agent2 public key\u003e\n    agent3 \u003cother long random string, which is agent3 public key\u003e\n    ...\n\nmacc.sh now runs in the foreground and waits for keyboard input to be broadcast to all participants in the chat.\nlet's create 2 more agents\n\n    # open a new terminal\n    mkdir -p agent2\n    cd agent2/\n    macc.sh \u003cpath to server\u003e\n    \n    # open a new terminal\n    mkdir -p agent3\n    cd agent3/\n    macc.sh \u003cpath to server\u003e\n\nTo enable communication between these agents, they must know each others public key, so let's create the agents peer files:\n\n    for i in $(seq 1 3); do (echo -n \"agent$i \"; cat agent$i/pub) \u003e\u003eagent1/peers; done cp agent1/peers agent2/peers; cp agent1/peers agent3/peers\n\nNow restart all macc instances, and send message from one to the other. You can see what happens in the socket files and in the server/out file.\n\nProtocol\n\nSetting up a new agent\n\n 1. Agent generates its own static key\n\nNew user joins group\n\n 1. New agent announces unencrypted broadcast to the group.\n\n 2. Group members start DH key exchange with new agent\n\n 3. the new agent signs his ephemeral key with his static key and sends this to all group members\n\n 4. Group members verify signature, if successful they respond with their verification key signed by their own static key\n\n 5. All group members that verify the signature successfully add the new party to their session.\n\nAgent send encrypted broadcast\n\n 1. agent encrypts his message for each user seperately\n\n 2. agent sends the n encrypted messages to the broadcast channel\n\nSample session with 3 participants\n\n    # first agent has italian names for the peers\n    ../macc.sh ../server/\n    01:45 -!- /tmp/tmp.TiOrRUrTOv dh request\n    01:45 -!- /tmp/tmp.WsSHipXKVZ dh request\n    01:45 -!- due        joined\n    01:45 -!- tres       joined\n    ohai\n    01:45 \u003cdue       \u003e hello world!\n    01:45 \u003ctres      \u003e yippie!\n    01:45 -!- tres       left\n    01:46 -!- due        left\n\n    # second agent seems to be english speaking\n    ../macc.sh ../server/\n    01:45 -!- /tmp/tmp.WsSHipXKVZ dh request\n    01:45 -!- three      joined\n    01:45 -!- /tmp/tmp.AkBH3lNAmz found\n    01:45 -!- one        joined\n    01:45 \u003cone       \u003e ohai\n    hello world!\n    01:45 \u003cthree     \u003e yippie!\n    01:45 -!- three      left\n\n    # 3rd agent seems german\n    ../macc.sh ../server/\n    01:45 -!- /tmp/tmp.TiOrRUrTOv found\n    01:45 -!- zwei       joined\n    01:45 -!- /tmp/tmp.AkBH3lNAmz found\n    01:45 -!- eins       joined\n    01:45 \u003ceins      \u003e ohai\n    01:45 \u003czwei      \u003e hello world!\n    yippie!\n\nThe broadcast channel contains this data\n\n    agent:/tmp/tmp.WsSHipXKVZ\n    agent:/tmp/tmp.TiOrRUrTOv\n    agent:/tmp/tmp.AkBH3lNAmz\n    msg:U2FsdGVkX19D1zvDLLfsvt/TsMh8nWd+F2WleeaImH1FrUsTl8eo5mHC3FnS: U2FsdGVkX18qi4F6vvH7mvhxhFNVpvQULHA0FCcnCFKRy1WGzsCLthKqb5n6spc52HeMVU6MSm+Q+Pb+7nPZFBoUq43TCrMg4+pj/s+2bNNJtaPDMpfVywnoVUjPlvgAxB9Yfn4grwLLWrI= U2FsdGVkX18/sY/nk3Sj4lvg7Am1NPGkiWl5lLmKRL/PSI7pZISmykl69cNx6De0Qv1OZrwUnc8iuyJYyOaFybSyCghiUBKHYZuNdDTwbTPtxsvxJi1TKVbE0DiUyw1ftnoB5+qXXIlSTeE=\n    msg:U2FsdGVkX18hzmQCTpp9Fzf1Kw4GCqjgqqfH6r6Eoo3mBR16NVCKNPkD2pcE2N1ZctTKb3k=: U2FsdGVkX18ZyY35AHhGQ/Zv5oasDkcKf1KgStpAxVeNGho2GMBwg/mE06B0BNVSuGH9YxFz2CIWuNPO/moFlhkjXz0KdZbWuC6RMpwtI9zXxWqeFpJHwY8tVjueqKCitjklC/0nfJeZXeQ= U2FsdGVkX1/KqjzUqH104aPUaTNPgrK+x9cvpaKCu0HfquoVD9JhdFILCBsVbW2h9SWbmQo8ZVgkYSxc3CzY5GVY9XVo9Xe6deTvjjIUQMH2fQxbbslZOEbZnjR0bMdYOkbsd0ArIIMWDeg=\n    msg:U2FsdGVkX18VL3gHylijRwEiqKl7Nrnq8DduXYXx+RgEJovRVqH9QE4/4jMNLo5U: U2FsdGVkX19XxF+Xa5a53vq9C0JDyjGB8rBw/vsEk2BOF6k3Fn7AQmmWbKDU6kwQ39/S2cz/k0+/PO5/BhFLnPGh3A0iuGYareSRtic2AlpgqFKMs6yI+FcwLWApug6ChTtLlAxyxdr9KsE= U2FsdGVkX1/zygLSauW+O8AMMkE4riLT+6D1FV/aPax94IHg8Qjd/CgFyQBTvPxJd38T+Da7UBacwUtLBkY0zd7qrf4Vy8LUtBdkGPkhHkNprC5whKyX579uKHazfXMqnHnAoiUREL9jsoQ=\n    leave:/tmp/tmp.WsSHipXKVZ\n    leave:/tmp/tmp.TiOrRUrTOv\n    leave:/tmp/tmp.AkBH3lNAmz\n\nThe Agents have this in their \"sockets\"\n\nagent1\n\n    dh2:/tmp/tmp.TiOrRUrTOv:\u0026gTEf?IDbV7Asmez~3+-%Tk6_UxYXC/XST\u003c+T\u003c1p%@Wy.K?sK]%INRqt||ju#R(wqkdX;O9c@|]g7(PD!\n    auth:/tmp/tmp.TiOrRUrTOv:U2FsdGVkX1/R6j64FqZbucHZ2xqH0CbvMVKfmpzrnMJG88nSwdprgbrm7Q5TyQtgfYW+ZgURNgHqOm0NvsCdaJPCHRYmIVqdpMLjnlprzfBpQRpkMK/KgKLRz7MaIu5m1Kx69TwikaXRYTYB512sJoVoNB5WZLLFDCPoO7yVMawljY9Bjb0ZDAEzTcAKbMLr5gdgoR/9E1lLg2YUR84MM0drO2PU/OzdkAVYP71S/l6Ei/KwOG8aIng1ZmVygCb8PNf5LcNpXxE8m0KFXS1CjLngGj/5VWXvJk6W\n    dh2:/tmp/tmp.AkBH3lNAmz:%zczJU-o;$!RiA}EwWq_ZL4%^!^IA-5M.\u003cM-^j3ewZ)WKy@)3}UAk[5v3g)R$66*XLH)wL,c}D.7?eVT=\n    auth:/tmp/tmp.AkBH3lNAmz:U2FsdGVkX18jruuclmmVKVpcSkB8rxMhStWpAP3PCSsiCGfZMFdwBjnKPN91uVTDCDNaH0e9E/0l2DZT1MF/yOjcB6eglonjn7YFaCm0Rn6p9af6Jb/ZCz8hqADA4IPVjjLRo60pAuxeW/W60gcXl0oeizGcfe659KzUVbCpHxGvqpmJNdp2MOSLt6NNiGJOCKMG1d5hM9NAobnvcCWGii153IYE8chgF6OTgtGcC12s880mNPqiRPbzj6GmglYWZJjnUImN82toJrIYOySOQgUmjJQg9bNSBLmK\n\nagent2\n\n    dh:/tmp/tmp.WsSHipXKVZ:#*vW6]:tRnKA)lg*~T:Z!|?l/XMqvHY\u003e\u003c5^EmLI\u003cI\u003cKeSk?u+dRc_HJR3s\u003cy5N^j5KOZTO%xSQ@-?9@E6\n    auth2:/tmp/tmp.WsSHipXKVZ:U2FsdGVkX1+nNEfIwkwEaebTLRoDPOWQmN9/CjzjrMRYhTIN3mRMMK56CUomg0FoCJiJahywvoSL5LfFOc3QGQHnT6vV7HWau9JT3TURfHQKh6nV6Bpw2MIcKCi/dqpphH+/A/CAYJ2bTRFN23brtqBfGqEtWjpQmj50q0TB3TRH6DswfxoqlzcFtyfMTXjdY1RjQwPOHaRvAfoHZsPJbNUyX0TdlmJGFT9uAOnOZ4J9y0TMNFaW1C3vNCcQQqxG4t80PR8PQGXET/B3i09GijCIc5kExJ4xUPoE\n    dh2:/tmp/tmp.AkBH3lNAmz:%krrGWX\u003eee=iXQpjY/Ld6w@6,+Cx;g||_!\u003c{c$7}4]Co;n_JcZ/qV05PtgE_Z\u0026if+dGp\u003e?,$Ux!?iSRNv\n    auth:/tmp/tmp.AkBH3lNAmz:U2FsdGVkX1801LJLnW9ou0njeD458b/sG9tj14wUUmKp0JyXEZUmy5A+y9exsnbXEwkzEOrB5O7n1p3EbxTvUwtX/KBP7NyvfyxZY7T6ZB33TnltldD3095T9lIqCf3BilFuxUtQjJRIf6FBTfTZp/K/iJsW0HDJglQVkEnYizw2Gflz3w+xtuqIZVnDrcwJ9XtHben0B+SxlOoHYRWQnX9YzR76Iau1oMvUBGrxVPa1454Pcs1Py2R6QfEIDiMTxIDqkYSmOI2xEjrWv8XSEFfnu3b0ZChZ/E3M\n\nagent3\n\n    dh:/tmp/tmp.TiOrRUrTOv:(+{LN6qxJVy:.-/;;lW0PeD5@[Jc7nfRr^xzfOh8B15pX!9USu(wdb?U,JX\u003eivBx6Rv=+l6PR(yx)PUS/\n    dh:/tmp/tmp.WsSHipXKVZ:\u0026ZHSV^cr1oL!N\u0026gK_lX|rP4x2\u003caN3YIiEP59%DX{l295;u0WErsnhOl,nDqneo[HsDs)ks2MzK-[t8n*M\n    auth2:/tmp/tmp.TiOrRUrTOv:U2FsdGVkX19xBJf607P4dEJq62I66P5b4ZFdM1tmOrrBBRhk56JBY0O3PX17KBgV4oDznx+NMjLBTiKUtnNbRWnNjhhKEhp8TSNf7aShbhBgpvWdXiN4btLRJafUa0PjrKG3ltjIjY1JDonkxT0L7He7fwF3IadaTw+3yelbs/uAve7IRiL0Bhl1JRvpQbu3iGSWP+rlWUJuUwhU/koVTFxuK5e6BPRZBAfp9x/iyZTjRg0DbFFuvEE197HrpCQa0KxErur0mU9vVdQEsCCVvcHNuFMpLkRFlbH7\n    auth2:/tmp/tmp.WsSHipXKVZ:U2FsdGVkX18vfb5axdjrLq8QCltsDW7BLdcpBBqBSZjTwmOIgkfv8X5scgrUz05qiRBy8gBGIP+qveLuDbc27k2NHckHxOJ/ciDk07zogzi2FeemGK/pmRmSCvvZOQGcu17XQBMf2Wr8N+3507scFRBMvg7GAXkM12E/hMrdoF8Wq2a0334kpNdT+EceBRkPXQYspbbLzl3FiSy+OTRzMCXU68GC2AapKuTsjo8RWTr9CaM+Ci5JgCvWTkBRWHw/1CYacJbc/e3m0WAw52Tnw28GPMoZQIyUuad+\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstef%2Fmacc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstef%2Fmacc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstef%2Fmacc/lists"}