[{"data":1,"prerenderedAt":338},["ShallowReactive",2],{"project-25231566":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":27,"sentiment":28,"stance_mix":29,"scored_comments":34,"aspects":35,"strip":40,"post_text":42,"what":43,"said":81,"maker_in_thread":167,"shape":173,"grid":178,"attempts":300,"same_week":301,"maker_shows":293,"maker_hidden":330,"reader_version":331,"card":332},"25231566","NFreezer","Encrypted-at-rest remote backup tool","title","Show HN: NFreezer – Encrypted-at-rest remote backup tool","https:\u002F\u002Fgithub.com\u002Fjosephernest\u002Fnfreezer","github.com","josephernest",1606503305,2020,96,49,671,3028,23,"notable","infrastructure","remote backup","cli",[24,21,25,26],"encrypted backup","rsync alternative","zero knowledge backup","mixed",-0.281,{"positive":30,"neutral":31,"mixed":32,"critical":33},2,8,1,10,21,{"idea":36,"execution":38,"docs":39},{"positive":37,"critical":31},0,{"positive":37,"critical":30},{"positive":37,"critical":37},[37,32,32,41,32,37,37,37,41,37,32,37,37,32,37,41,37,41,41,37,37,37,41,37,37,37,37,37,32,32,37,32,37,37,37,41,41,37,37,41],3,null,{"problem":44,"audience":51,"pricing":42,"motivation":55,"time_to_build":42,"stack":62,"openness":80,"stage":80,"team_size":80},{"value":45,"source":46,"evidence":47},"Remote backups where the destination server could see decrypted data before it is written to encrypted storage","maker",[48],{"id":49,"by":11,"text":50},"25231718","Hi there! Author here. I created nFreezer initially for my needs, because when doing remote backups (especially on servers on which we never have physical access), it's hard to…",{"value":52,"source":46,"evidence":53},"People backing up to servers they do not physically control",[54],{"id":49,"by":11,"text":50},{"value":56,"source":46,"evidence":57},"Maker wanted to avoid trusting remote servers with unencrypted data during backups and to avoid re-sending renamed files",[58,59],{"id":49,"by":11,"text":50},{"id":60,"by":11,"text":61},"25236430","Thanks for asking the question, it's right, there are thousands of backup programs already. The \"key thing\" that lead me to code my own is that with nearly all the solutions I…",[63,74],{"value":64,"source":65,"evidence":66},"Python","commenter",[67,71],{"id":68,"by":69,"text":70},"25240701","rakoo","From https:\u002F\u002Fgithub.com\u002Fjosephernest\u002Fnfreezer\u002Fblob\u002Fmaster\u002Fnfreezer.py, this is how you decrypt files: ``` [...] with open(f2, 'wb') as f, src_cm.open(chunkid.hex(), 'rb') as g:…",{"id":72,"by":11,"text":73},"25236474","As I discover it, borg seems to be pretty good for this use case indeed. But still there is one thing (at least) that can be of interest to some people with nFreezer: it is very…",{"value":75,"source":46,"evidence":76},"AES (pycryptodome)",[77],{"id":78,"by":11,"text":79},"25251945","To clarify: if you start from a given nonce and key: ``` cipher = AES.new(key, AES.MODE_GCM, nonce) while True: block = f.read(16*1024*1024) if not block: break…","unknown",{"praise":82,"objections":90,"requests":105,"questions":114,"alternatives":130},[83],{"value":84,"source":46,"evidence":85},"Simple codebase (249 lines) that can be audited quickly",[86,87],{"id":72,"by":11,"text":73},{"id":88,"by":11,"text":89},"25236391","nFreezer is different to RClone and Duplicity on a very important point (for me because I often move big multimedia projects): if you move `\u002Fpath\u002Fto\u002F10GB_file` to…",[91,98],{"value":92,"source":65,"evidence":93},"Streaming decryption writes data before the authentication tag is verified, which is unsafe",[94,95],{"id":68,"by":69,"text":70},{"id":96,"by":69,"text":97},"25249109","> So if there is a tag problem, this is clearly logged, and you know something is wrong [...] The good thing is that you can easily edit it and have instead (pass the filename fn…",{"value":99,"source":65,"evidence":100},"Lacks the deduplication and compression features of established tools",[101],{"id":102,"by":103,"text":104},"25237298","giomasce","I don't see the key point: the two things (trusting the remote storage and the tool) are rather independent for me. I already trust probably billions lines of code which handle…",[106],{"value":107,"source":65,"evidence":108},"Content-defined chunking for finer deduplication",[109,110],{"id":96,"by":69,"text":97},{"id":111,"by":112,"text":113},"25236731","quantumofalpha","> The \"key thing\" that lead me to code my own is that with nearly all the solutions I tried, data was resent over network when a big file is moved to another dir+renamed, WHEN…",[115,124],{"value":116,"source":65,"evidence":117},"How does it compare to restic, borg and rclone",[118,121],{"id":119,"by":112,"text":120},"25236153","restic, borg, even plain rclone. plenty of backup tools exist with encryption at rest, what's the key selling point of yours? I use rclone+restic because of google drive(=cheap…",{"id":122,"by":103,"text":123},"25236238","I use Borg to a local home server and then Duplicity on the Borg repository to Google Drive (where I happen to have a lot of space for free due to my university). In this way I…",{"value":125,"source":46,"evidence":126},"Does restic need to be installed on the remote host when using SFTP",[127],{"id":128,"by":11,"text":129},"25244819","I'll have a look too. When using with SFTP, do Restic binaries need to be installed on both local and remote, or just local?",[131,142,149,153,160],{"value":132,"source":65,"evidence":133},"restic",[134,138],{"id":135,"by":136,"text":137},"25236098","noodlesUK","Don’t forget restic - it also works great on s3 compatible services! https:\u002F\u002Frestic.net",{"id":139,"by":140,"text":141},"25243825","sjellis","Yes, restic would be my pick: easy to deploy and use, well-maintained. If you want some assurance, CERN are deploying restic:…",{"value":143,"source":65,"evidence":144},"borg",[145],{"id":146,"by":147,"text":148},"25236018","rsync","borg[1] has become the de facto standard for this use-case.[2] It can run over SSH with the borg binary on the remote server or it can run in an SFTP mode with nothing installed…",{"value":150,"source":65,"evidence":151},"rclone",[152],{"id":119,"by":112,"text":120},{"value":154,"source":65,"evidence":155},"duplicacy",[156],{"id":157,"by":158,"text":159},"25238830","jaden","Duplicacy is a separate backup tool, but has a confusingly similar name to duplicity. I believe its chunking algorithm means large renamed files aren't re-transferred.",{"value":161,"source":65,"evidence":162},"tarsnap",[163],{"id":164,"by":165,"text":166},"25238833","tonyhb","Also want to plug an old HN favourite - tarsnap. https:\u002F\u002Fwww.tarsnap.com\u002F",{"comments":33,"answered":168,"key":169},4,[170,171,172],{"id":49,"text":50},{"id":128,"text":129},{"id":72,"text":73},{"commenters":174,"max_depth":175,"maker_replies":33,"first_comment_mins":176,"lifespan_hours":177},30,7,20,291,[179,181,183,184,188,189,191,193,195,199,203,205,208,209,210,214,215,219,222,224,225,226,230,233,234,235,238,241,243,245,248,251,254,257,259,262,265,267,269,272,275,276,280,283,287,289,291,295,297],[49,37,37,180,11,32],"maker\u002Fneutral\u002Fidea",[146,37,32,182,147,37],"project\u002Fcritical\u002Fidea",[135,37,32,182,136,37],[185,37,41,186,187,37],"25237119","project\u002Fneutral\u002Fnone","nix23",[139,37,32,182,140,37],[128,37,37,190,11,32],"other\u002Fneutral\u002Fnone",[72,37,37,192,11,32],"project\u002Fpositive\u002Fidea",[102,37,37,194,103,37],"commenter\u002Fcritical\u002Fidea",[196,37,37,197,198,37],"25238174","commenter\u002Fpositive\u002Fidea","rufugee",[200,37,201,202,147,37],"25238618",5,"maker\u002Fpositive\u002Fnone",[68,37,32,204,69,37],"project\u002Fcritical\u002Fexecution",[206,37,37,207,11,32],"25241145","project\u002Fneutral\u002Fexecution",[96,37,32,204,69,37],[78,37,37,207,11,32],[211,37,37,212,213,37],"25267448","commenter\u002Fneutral\u002Fnone","cperciva",[164,37,32,182,165,37],[216,37,41,217,218,37],"25236133","project\u002Fneutral\u002Fdocs","jogundas",[220,37,37,221,11,32],"25236413","maker\u002Fneutral\u002Fnone",[119,37,41,223,112,37],"project\u002Fneutral\u002Fidea",[60,37,37,223,11,32],[111,37,32,182,112,37],[227,37,201,228,229,37],"25236158","project\u002Fpositive\u002Fnone","bartvk",[231,37,41,223,232,37],"25236240","ajvs",[88,37,37,223,11,32],[157,37,37,212,158,37],[236,37,37,212,237,37],"25239661","sebmellen",[239,37,41,186,240,37],"25236510","querez",[242,37,37,223,11,32],"25236531",[244,37,37,212,240,37],"25237647",[246,37,37,190,247,37],"25236762","gradschool",[249,37,37,190,250,37],"25237017","wheybags",[252,37,37,190,253,37],"25238612","DarkmSparks",[255,37,37,212,256,37],"25243238","basicneo",[258,37,37,212,253,37],"25365937",[260,32,32,182,261,37],"25238093","xmodem",[263,32,32,182,264,37],"25238125","cyphar",[266,32,37,212,261,37],"25238311",[268,32,37,212,264,37],"25238460",[270,32,32,182,271,37],"25238244","seized",[273,32,37,212,274,37],"25238601","aborsy",[122,30,37,190,103,37],[277,30,37,278,279,37],"25237055","commenter\u002Fpositive\u002Fnone","bloopernova",[281,41,41,223,282,37],"25236136","entire-name",[284,168,41,285,286,37],"25237767","project\u002Fmixed\u002Fidea","sandreas",[288,201,41,223,274,37],"25238497",[290,201,37,223,11,32],"25240547",[292,293,37,190,294,37],"25237025",6,"slifin",[296,293,37,190,294,37],"25237033",[298,175,41,217,299,37],"25238142","thinkloop",[],[302,307,312,316,321,326],{"id":303,"name":304,"points":305,"category":306},"25245740","SpaceHey",726,"web_saas",{"id":308,"name":309,"points":310,"category":311},"25246179","Mahjong Solitaire (jongmah.com)",252,"games",{"id":313,"name":314,"points":315,"category":311},"25232290","Dungeon Map Doodler",126,{"id":317,"name":318,"points":319,"category":320},"25229600","BlobCity A.I. Cloud",125,"ai",{"id":322,"name":323,"points":324,"category":325},"25250589","Dicom",108,"languages",{"id":327,"name":328,"points":329,"category":325},"25237181","Thi.ng",107,false,"v2",{"id":333,"name":5,"line":6,"ai":330,"cat":20,"year":13,"points":14,"comments":15,"rec":27,"s":334,"top":18,"kw":335,"maker":11,"domain":10,"tier":19,"attempts":37,"strip":336,"url":9,"mix":337,"praise":84,"objection":92,"sub":21},25231566,-0.28,[24,21,25,26],"0113100030100103033000300000110100033003",[30,31,32,33],1794036598908]