[{"data":1,"prerenderedAt":714},["ShallowReactive",2],{"project-42284412":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":29,"sentiment":30,"stance_mix":31,"scored_comments":35,"aspects":36,"strip":45,"post_text":48,"what":49,"said":106,"maker_in_thread":227,"shape":238,"grid":243,"attempts":674,"same_week":675,"maker_shows":47,"maker_hidden":706,"reader_version":707,"card":708},"42284412","Privastead","Open-source private home security camera system (end-to-end encryption)","title","Show HN: Open-source private home security camera system (end-to-end encryption)","https:\u002F\u002Fgithub.com\u002Fprivastead\u002Fprivastead","github.com","arrdalan",1733004829,2024,551,165,53,3515,2,"legend","security_privacy","home security cameras","other",[24,25,26,27,28],"end-to-end encryption","home security camera","mls","open source nvr","self-hosted camera","curious",-0.024,{"positive":32,"neutral":33,"mixed":18,"critical":34},7,27,13,49,{"idea":37,"design":39,"performance":42,"privacy":43,"execution":44},{"positive":38,"critical":32},4,{"positive":40,"critical":41},0,1,{"positive":40,"critical":40},{"positive":40,"critical":38},{"positive":40,"critical":41},[46,40,40,40,47,41,41,41,47,41,47,46,40,41,40,40,41,47,41,47,40,41,47,46,41,46,40,40,47,47,41,47,40,47,40,40,40,40,47,18],5,3,"I needed a security camera inside my house, one that would send motion notifications to my smartphone and would allow me to livestream remotely. However, I could not find one that I could trust due to privacy concerns. Many of them upload the plaintext of videos to their servers and none is fully open-source as far as I know. Therefore, I decided to use my spare time to build one from scratch. Called Privastead (as in Private Homestead), it uses OpenMLS for end-to-end encryption (between the camera local hub and the smartphone) and is mostly implemented in Rust (except for part of the Android ",{"problem":50,"audience":56,"pricing":63,"motivation":64,"time_to_build":63,"stack":68,"openness":103,"stage":104,"team_size":105},{"value":51,"source":52,"evidence":53},"Home security cameras upload plaintext video to vendor servers, which the maker considers a privacy risk","maker",[54],{"id":55},"post",{"value":57,"source":52,"evidence":58},"Privacy-conscious users wanting home security cameras with motion alerts and remote livestreaming",[59,60],{"id":55},{"id":61,"by":11,"text":62},"42285466","I completely agree that security cameras can be a disaster for one's privacy. That's why I decided to build Privastead for my own use in the first place. It's fully open source,…",null,{"value":65,"source":52,"evidence":66},"Maker wanted a camera inside their house without trusting vendor cloud privacy",[67],{"id":55},[69,76,80,84,94],{"value":70,"source":52,"evidence":71},"Rust",[72,73],{"id":55},{"id":74,"by":11,"text":75},"42285738","The reason I chose Rust is that it eliminates memory safety vulnerabilities, which have been a major headache is software systems. Using Rust provides higher security assurance…",{"value":77,"source":52,"evidence":78},"Kotlin (Android app)",[79],{"id":55},{"value":81,"source":52,"evidence":82},"OpenMLS",[83],{"id":55},{"value":85,"source":52,"evidence":86},"Firebase Cloud Messaging",[87,91],{"id":88,"by":89,"text":90},"42285585","dylan604","\"Privastead uses the Google Firebase Cloud Messaging (FCM)\" I'm am totally unfamiliar with this, but what level of concern that theGoogs pulls the plug on this service about the…",{"id":92,"by":11,"text":93},"42285796","I'm not too concerned with that. As far as I know, almost all Android apps that need to send notifications to the device use FCM. If Google pulls the plug on it, many apps will…",{"value":95,"source":52,"evidence":96},"ffmpeg",[97,100],{"id":98,"by":11,"text":99},"42291367","Sorry, which question did I miss?",{"id":101,"by":11,"text":102},"42295981","Yes, we have different approaches\u002Fdesigns. In fact, I don't even of think of Privastead as an NVR solution. The choice of using a hub is mainly because I didn't have control of…","open_source","prototype","solo",{"praise":107,"objections":124,"requests":156,"questions":178,"alternatives":198},[108,117],{"value":109,"source":110,"evidence":111},"Privacy-focused design with end-to-end encryption and open source","commenter",[112,116],{"id":113,"by":114,"text":115},"42285332","KetoManx64","Wow!! Very cool project. The reasons you mentioned above are the exact reason that I have not setup security cameras at my house, but this makes me reconsider. Combined with the…",{"id":61,"by":11,"text":62},{"value":118,"source":110,"evidence":119},"Rust choice and interest in the project",[120],{"id":121,"by":122,"text":123},"42285567","VTimofeenko","I've been a happy user of frigate (https:\u002F\u002Ffrigate.video) with fully local isolated setup: multiple poe cameras on a dedicated network, coral to supplement on-camera recognition,…",[125,132,142,152],{"value":126,"source":110,"evidence":127},"Only motion detection, no human detection",[128],{"id":129,"by":130,"text":131},"42286947","mattlondon","Having had cameras and a couple of breakin attempts for a while now my biggest must-have for these sort of things is: - reliable human detection (not just motion) - integration…",{"value":133,"source":110,"evidence":134},"Only supports one camera model and one camera",[135,139],{"id":136,"by":137,"text":138},"42287854","0points","Certainly interesting project, but I do encourage people to do more thorough research before starting a new project and claiming they needed to fill a void. > However, I could…",{"id":140,"by":11,"text":141},"42286239","If you use Home Assistant in an isolated local network with no Internet access, you will have good privacy. However, I needed to be able to use my camera remotely from my phone.…",{"value":143,"source":110,"evidence":144},"Camera-to-hub traffic is unencrypted",[145,149],{"id":146,"by":147,"text":148},"42288089","SahAssar","I'd assume that end-to-end encryption would mean the traffic is encrypted between the camera and the app, which it isn't. That would require an app in the camera to support the…",{"id":150,"by":11,"text":151},"42295809","I have mentioned the unencrypted traffic between the camera and hub here: https:\u002F\u002Fgithub.com\u002Fprivastead\u002Fprivastead\u002Fblob\u002Fmain\u002FHOW_TO.md (Step 4, second paragraph)",{"value":153,"source":110,"evidence":154},"Existing alternatives like Frigate and moonfire-nvr already cover this",[155],{"id":136,"by":137,"text":138},[157,161,165,171],{"value":158,"source":110,"evidence":159},"Human detection instead of motion only",[160],{"id":129,"by":130,"text":131},{"value":162,"source":110,"evidence":163},"APIs or MQTT integration",[164],{"id":129,"by":130,"text":131},{"value":166,"source":110,"evidence":167},"Support for multiple cameras",[168],{"id":169,"by":11,"text":170},"42286293","A fully isolated setup on a dedicated network can certainly provide good privacy. A key benefit of Privastead is that it can send the videos to your smartphone remotely using a…",{"value":172,"source":110,"evidence":173},"Run the server as a Cloudflare worker",[174],{"id":175,"by":176,"text":177},"42286011","amluto","Nifty. Have you considered trying to make the server be able to run as something like a Cloudflare worker?",[179,187,194],{"value":180,"source":110,"evidence":181},"How it compares to Home Assistant and other self-hosted NVRs",[182,186],{"id":183,"by":184,"text":185},"42285384","nzeid","I'm deeply interested in this and it just so happens I only need one hardened IP camera for my home. Can you point out how your project provides a better security layout than…",{"id":136,"by":137,"text":138},{"value":188,"source":110,"evidence":189},"Why an untrusted server component is needed",[190],{"id":191,"by":192,"text":193},"42290326","scottlamb","What is the purpose of introducing the untrusted \"server\" component? Is it intended to run in a different place than the trusted \"camera hub\" component, such as on a cloud…",{"value":195,"source":110,"evidence":196},"Whether the camera hub could run inside the camera firmware",[197],{"id":113,"by":114,"text":115},[199,204,208,213,220],{"value":200,"source":110,"evidence":201},"Frigate",[202,203],{"id":136,"by":137,"text":138},{"id":121,"by":122,"text":123},{"value":205,"source":110,"evidence":206},"Home Assistant",[207],{"id":183,"by":184,"text":185},{"value":209,"source":110,"evidence":210},"moonfire-nvr",[211,212],{"id":136,"by":137,"text":138},{"id":191,"by":192,"text":193},{"value":214,"source":110,"evidence":215},"Scrypted",[216],{"id":217,"by":218,"text":219},"42285356","EthicalSimilar","Did you look into Scrypted? It is OSS. With HomeKit (which is how I use it) it is also E2EE. I’m not sure if their app is E2EE though, I only use HomeKit. It’s pretty good and…",{"value":221,"source":110,"evidence":222},"ZoneMinder",[223],{"id":224,"by":225,"text":226},"42287628","kkfx","ZoneMinder?",{"comments":228,"answered":229,"key":230},33,14,[231,232,235],{"id":61,"text":62},{"id":233,"text":234},"42285442","Glad to hear it. And thanks for the pointer on OpenMiko. It would indeed be nice to port Privastead's camera hub to run directly in the camera firmware. This will make the setup…",{"id":236,"text":237},"42293079","Privastead\u002FOpenMLS erases past keys from persistent storage in order not to suffer from the vulnerability you mentioned.",{"commenters":239,"max_depth":240,"maker_replies":228,"first_comment_mins":241,"lifespan_hours":242},83,9,178,102,[244,246,250,252,256,259,263,267,270,273,276,279,282,284,287,290,292,295,297,301,305,309,310,313,315,317,320,322,324,328,330,332,334,338,341,343,346,348,350,353,354,357,358,360,362,364,367,371,374,377,379,382,384,386,388,391,394,397,400,402,405,407,409,411,414,417,419,421,424,428,432,433,435,438,440,443,446,449,451,455,459,462,466,468,471,473,475,479,481,483,485,487,491,495,497,499,502,506,510,514,516,519,522,524,526,529,531,532,535,538,541,544,546,549,552,554,556,557,559,561,564,566,569,571,573,576,578,580,583,585,590,592,594,596,598,602,604,606,609,611,615,617,620,622,625,627,629,631,633,636,638,640,643,646,650,653,655,657,659,661,663,664,667,669,672],[113,40,46,245,114,40],"project\u002Fpositive\u002Fidea",[247,40,40,248,249,40],"42285367","other\u002Fneutral\u002Fnone","ranger_danger",[61,40,40,251,11,41],"project\u002Fpositive\u002Fprivacy",[253,40,46,254,255,40],"42289184","maker\u002Fpositive\u002Fnone","chgs",[257,40,40,248,258,40],"42285537","LoganDark",[260,40,40,261,262,40],"42290538","other\u002Fneutral\u002Fidea","yieldcrv",[264,40,40,265,266,40],"42290721","commenter\u002Fcritical\u002Fidea","krisoft",[268,40,40,269,262,40],"42291042","commenter\u002Fneutral\u002Fidea",[271,40,40,272,266,40],"42297003","commenter\u002Fneutral\u002Fnone",[274,40,40,275,258,40],"42292018","other\u002Fneutral\u002Fprivacy",[277,40,40,248,278,40],"42289441","ndsipa_pomu",[280,40,40,275,281,40],"42291515","Klonoar",[283,40,40,248,278,40],"42294265",[285,40,40,275,286,40],"42324912","paledot",[288,40,40,248,289,40],"42293791","nothrabannosir",[291,40,40,248,249,40],"42293831",[293,40,40,248,294,40],"42298514","e40",[233,40,40,296,11,41],"project\u002Fneutral\u002Fidea",[298,41,47,299,300,40],"42286703","project\u002Fneutral\u002Fdesign","h317",[302,41,47,303,304,40],"42291046","project\u002Fneutral\u002Fperformance","hedora",[306,18,47,307,308,40],"42291276","project\u002Fneutral\u002Fprivacy","coppsilgold",[236,18,40,251,11,41],[311,47,40,261,312,40],"42289262","EGreg",[146,38,41,314,147,40],"project\u002Fcritical\u002Fprivacy",[316,38,40,307,11,41],"42288568",[318,38,40,319,147,40],"42288613","commenter\u002Fneutral\u002Fprivacy",[321,38,40,307,11,41],"42290608",[323,38,41,314,147,40],"42290719",[325,38,47,326,327,40],"42292567","project\u002Fmixed\u002Fprivacy","egberts1",[329,38,40,307,11,41],"42292771",[331,38,41,314,147,40],"42293786",[150,38,40,333,11,41],"project\u002Fneutral\u002Fdocs",[335,38,40,336,337,40],"42291093","commenter\u002Fpositive\u002Fprivacy","vineyardmike",[339,46,40,275,340,40],"42293537","Ballas",[191,342,47,299,192,40],6,[344,342,47,299,345,40],"42290343","sneak",[347,342,47,299,192,40],"42290405",[349,342,40,299,11,41],"42290589",[351,342,47,352,192,40],"42290844","maker\u002Fneutral\u002Fnone",[98,342,40,352,11,41],[355,342,41,356,192,40],"42293260","project\u002Fcritical\u002Fdesign",[101,342,40,299,11,41],[359,342,47,352,192,40],"42298368",[361,342,40,307,11,41],"42290557",[363,342,40,307,11,41],"42290547",[365,32,46,245,366,40],"42287349","unit149",[368,369,40,275,370,40],"42287023",8,"INTPenis",[372,369,40,248,373,40],"42287190","goodpoint",[375,369,40,275,376,40],"42288143","stragies",[378,369,40,275,370,40],"42288922",[380,369,40,381,373,40],"42296322","commenter\u002Fcritical\u002Fprivacy",[383,369,40,272,370,40],"42297776",[385,369,40,319,114,40],"42301798",[387,369,40,275,370,40],"42321040",[389,240,40,248,390,40],"42290093","prymitive",[392,240,40,261,393,40],"42290710","squarefoot",[129,395,41,396,130,40],10,"project\u002Fcritical\u002Fidea",[398,395,40,269,399,40],"42287195","wkat4242",[401,395,40,275,130,40],"42287527",[403,395,40,275,404,40],"42288396","michaelt",[406,395,40,248,399,40],"42288477",[408,395,40,275,399,40],"42288470",[410,395,40,352,11,41],"42288615",[412,395,40,248,413,40],"42289334","xyst",[415,395,40,248,416,40],"42290900","stevenicr",[418,395,40,248,327,40],"42292622",[420,395,40,248,130,40],"42294540",[422,395,41,396,423,40],"42289610","bobbob1921",[425,426,47,296,427,40],"42314736",11,"chfritz",[429,430,40,248,431,40],"42287212",12,"eth0up",[183,34,47,307,184,40],[140,34,40,434,11,41],"maker\u002Fneutral\u002Fprivacy",[436,34,47,307,437,40],"42286281","hathawsh",[439,34,40,307,11,41],"42286589",[441,34,41,396,442,40],"42289471","euroderf",[444,34,41,396,445,40],"42291061","pzduniak",[447,229,47,307,448,40],"42285475","scotty79",[450,229,40,307,11,41],"42285787",[452,453,47,296,454,40],"42287213",15,"genericacct",[456,457,47,296,458,40],"42287935",16,"nubinetwork",[460,457,40,461,11,41],"42288594","project\u002Fneutral\u002Fnone",[463,464,40,248,465,40],"42285453",17,"globalnode",[74,464,40,467,11,41],"project\u002Fneutral\u002Fexecution",[469,464,40,248,470,40],"42286624","gauge_field",[472,464,40,248,465,40],"42288010",[474,464,40,248,470,40],"42292934",[476,477,41,396,478,40],"42287239",18,"ww520",[480,477,40,272,11,41],"42290643",[175,482,47,296,176,40],19,[484,482,40,467,11,41],"42286078",[486,482,47,296,176,40],"42288062",[488,489,47,303,490,40],"42302436",20,"m_2018",[492,493,47,296,494,40],"42286233",21,"hackermeows",[496,493,40,461,11,41],"42286325",[224,498,40,248,225,40],22,[500,498,40,248,501,40],"42287713","gregoriol",[503,504,47,296,505,40],"42287036",23,"moritonal",[507,508,46,254,509,40],"42288023",24,"jokowueu",[511,512,46,254,513,40],"42285531",25,"hereme888",[136,515,41,396,137,40],26,[517,515,40,248,518,40],"42287973","acidburnNSA",[520,515,40,248,521,40],"42287978","thelittleone",[523,515,40,248,137,40],"42288009",[525,515,40,248,518,40],"42288138",[527,515,40,248,528,40],"42288455","smitelli",[530,515,40,299,11,41],"42288852",[121,33,46,245,122,40],[533,33,40,248,534,40],"42285973","stevenpetryk",[536,33,40,248,537,40],"42286156","hughesjj",[539,33,40,275,540,40],"42286400","hunter2_",[542,33,40,248,543,40],"42286505","hipitihop",[545,33,40,275,537,40],"42322646",[547,33,40,248,548,40],"42287306","nonrandomstring",[550,33,40,275,551,40],"42287414","paranoidrobot",[553,33,40,248,548,40],"42289824",[555,33,40,248,122,40],"42286279",[169,33,40,307,11,41],[558,33,47,296,122,40],"42286327",[560,33,40,307,11,41],"42286347",[562,33,47,296,563,40],"42286567","tehlike",[565,33,40,299,11,41],"42286603",[567,33,47,296,568,40],"42286441","windexh8er",[570,33,40,299,11,41],"42286575",[572,33,40,272,568,40],"42291566",[574,33,41,396,575,40],"42287177","hamandcheese",[577,33,40,307,11,41],"42288662",[579,33,47,467,373,40],"42287432",[581,33,47,467,582,40],"42287460","discordance",[584,33,40,467,11,41],"42288675",[586,587,47,588,589,40],"42285740",28,"project\u002Fmixed\u002Fnone","StayTrue",[591,587,40,467,11,41],"42286313",[593,587,40,272,423,40],"42289676",[217,595,40,248,218,40],29,[597,595,40,248,176,40],"42285983",[599,595,40,600,601,40],"42289206","other\u002Fneutral\u002Fdesign","corytheboyd",[603,595,40,600,176,40],"42290488",[605,595,40,307,11,41],"42286051",[607,595,41,314,608,40],"42289423","cvwright",[610,595,40,299,11,41],"42292991",[612,613,46,245,614,40],"42286902",30,"modeless",[616,613,40,248,130,40],"42286917",[618,613,40,248,619,40],"42287172","Tempest1981",[621,613,40,248,130,40],"42287836",[623,613,40,272,624,40],"42287053","9dev",[626,613,40,248,614,40],"42287098",[628,613,40,248,399,40],"42287272",[630,613,40,275,399,40],"42287262",[632,613,40,275,614,40],"42287311",[634,613,40,248,635,40],"42287294","9x39",[637,613,40,248,614,40],"42287315",[639,613,40,248,635,40],"42287398",[641,613,40,248,642,40],"42287437","kdmtctl",[644,613,40,248,645,40],"42288427","ryandrake",[647,648,40,248,649,40],"42289655",31,"tills13",[651,648,40,248,652,40],"42289850","tuchsen",[654,648,40,275,345,40],"42290360",[656,648,40,275,649,40],"42293161",[658,648,40,275,345,40],"42306917",[660,648,40,275,649,40],"42311033",[88,662,47,467,89,40],32,[92,662,40,467,11,41],[665,662,47,467,666,40],"42288122","SushiHippie",[668,662,40,307,11,41],"42288698",[670,662,41,671,89,40],"42288745","project\u002Fcritical\u002Fexecution",[673,662,47,467,666,40],"42290072",[],[676,681,686,691,696,701],{"id":677,"name":678,"points":679,"category":680},"42289690","Markwhen",912,"productivity",{"id":682,"name":683,"points":684,"category":685},"42320032","Outerbase Studio",356,"dev_tools",{"id":687,"name":688,"points":689,"category":690},"42270389","Vince",283,"infrastructure",{"id":692,"name":693,"points":694,"category":695},"42311031","30cc",275,"languages",{"id":697,"name":698,"points":699,"category":700},"42261909","Voice-Pro",271,"creative",{"id":702,"name":703,"points":704,"category":705},"42295792","SeekStorm",245,"data",false,"v2",{"id":709,"name":5,"line":6,"ai":706,"cat":20,"year":13,"points":14,"comments":15,"rec":29,"s":710,"top":18,"kw":711,"maker":11,"domain":10,"tier":19,"attempts":40,"strip":712,"url":9,"mix":713,"praise":109,"objection":126,"sub":21},42284412,-0.02,[24,25,26,27,28],"5000311131350100131301351500331303000032",[32,33,18,34],1794036665154]