9 comments

  • josh37366 hours ago
    What wasn&#x27;t immediately clear to me is that you&#x27;re meant to set up Raspberry Pis with a Pi camera attached, and that serves as the camera device. This then provides E2E encryption directly between the Pi and the Secluso mobile app via a cloud relay service that just shovels the encrypted bytes.<p>Contrast with <a href="https:&#x2F;&#x2F;frigate.video&#x2F;" rel="nofollow">https:&#x2F;&#x2F;frigate.video&#x2F;</a>, which is a locally installed NVR server that pulls camera feeds over the LAN (from a very wide range of off-the-shelf IP cameras) and does all kinds of really neat local processing to do things like (optionally hardware-accelerated) object and audio detection, face recognition, ALPR, semantic search over recorded video, and more — while still maintaining similar privacy guarantees.<p>It&#x27;s great that you&#x27;ve done reproducible builds for camera firmware, since that means you don&#x27;t have to trust a shady IP camera vendor to be competent. Of course, with off-the-shelf stuff, you can largely avoid the security issues there by putting your cameras on a VLAN that can only reach your NVR.<p>What I don&#x27;t get is why there needs to be a cloud relay involved at all. If you&#x27;re fully E2E encrypted anyway, just have the app communicate directly with the camera via STUN.<p>I see you&#x27;re planning on selling the preassembled hardware. There&#x27;s definitely something to be said for &quot;buy this device, download app, done&quot; ease of setup for the wider market that meaningfully improves their privacy over Ring&#x2F;Nest&#x2F;et al. But for the power user and self-hosting crowd, I think Frigate makes a lot more sense.
    • arrdalan4 hours ago
      There are two comments&#x2F;questions here and I&#x27;ll try to address them one by one.<p>Secluso vs. Frigate: I think you correctly mentioned some of the differences. We intend Secluso to be replacement for Ring-like WiFi cameras. Therefore, it needs to be easy to set up and use and provide similar functions to a Ring camera: the user plugs in the camera, opens the app, scan a QR code and perform a pairing process, and the camera is ready to use with its strong end-to-end encryption. The self-hosted version of Secluso requires a few more steps, but we&#x27;ve tried to automate it as much as possible. Home Assistant and Frigate are great platforms that are capable of providing good privacy (although they don&#x27;t support advanced end-to-end encryption that Secluso does with forward secrecy and post-compromise security through MLS), but they require several steps, e.g., prepare&#x2F;configure the IP camera, install and configure Frigate, integrate Frigate with Home Assistant, and configure remote viewing via cloud relay or VPN. Also, they are typically used with wired (Ethernet) IP cameras. WiFi IP cameras are possible but the RTSP stream between the camera and hub will be unencrypted, which might be vulnerable to eavesdropping.<p>Need for cloud relay: We have considered STUN and we are planning to deploy MLS over WebRTC for livestreaming (using the DAVE protocol) to improve the livestream performance. But this doesn&#x27;t completely eliminate the need for a relay. If a STUN connection cannot be made due to some restrictions in one of the networks (that the camera and app are connected to), we will need to fall back to the relay. Also, if the phone is off&#x2F;disconnected when an event video is recorded, we would like to transfer it (encrypted) to the relay ASAP in case something happens to the camera (e.g., it&#x27;s taken by the intruder).
  • Keyb0ardWarri0r52 minutes ago
    This is great, congrats!<p>Do you think it would be possible to use ESP32 (RISC-V CPUs) based cameras?<p>Both for cost reduction and availability of the hardware reasons.<p>Maybe with a ChaCha20-based cipher instead of AES?
    • arrdalan26 minutes ago
      ESP32: We haven&#x27;t tested them. I would guess that they won&#x27;t be able to handle the workload (on-device AI, encryption, and video encoding if there&#x27;s no hardware encoder).<p>Ciphersuite: We use OpenMLS and we can choose any of the ciphersuites supported by it. We are using its post-quantum secure ciphersuite (MLS_256_XWING_CHACHA20POLY1305_SHA256_Ed25519).
    • flowerthoughts47 minutes ago
      When embedded SoCs are _much_ more likely to have AES accelerators, why are you looking to ChaCha20 for encrypting video?
  • HelloUsername29 minutes ago
    Why not release the iOS app in all regions?
  • fjfaase1 hour ago
    Are there also open-source solutions without dependency on server in the cloud and that depend on internet connection? I am looking for a total home solution where I can communicate with doorbel through laptop with headset.
  • eichin8 hours ago
    Ah, the name is a near-miss vs <a href="https:&#x2F;&#x2F;secuso.aifb.kit.edu&#x2F;english&#x2F;105.php" rel="nofollow">https:&#x2F;&#x2F;secuso.aifb.kit.edu&#x2F;english&#x2F;105.php</a> (the SECurity USability SOciety research group at Karlsruhe) that makes the &quot;Privacy Friendly Apps&quot; suite for Android. (I don&#x27;t think there&#x27;s any actual confusion, it was just a &quot;why did that sound familiar&quot; reflex :-)
  • blitzo8 hours ago
    I&#x27;m curious about the Yocto based OS. Can you tell us about the architecture? How small the LOC is and how much customization has been done if it based from existing stacks?
    • jkaczman7 hours ago
      Hi u&#x2F;blitzo, thanks for the reply! I&#x27;m the other contributor mentioned in the post (John Kaczman).<p>In case you&#x27;re not familiar with the Yocto Project, it&#x27;s designed to be a tool&#x2F;template for developers (like Ardalan and I!) to use to create custom Linux images for embedded devices (in this case, a Raspberry Pi).<p>It works off of distributing layers&#x2F;recipes (these &quot;templates&quot;) in open-source repositories for re-use among such developers that can be very easily baked in and customized if necessary.<p>Our current usage of it is relatively small. Our OS codebase is roughly ~1,000 LOC of a few recipe modifications (e.g. for fixing reproducible build issues, some minimizations, necessary dependencies we need), and, of course, integrating our camera_hub binary and updater binary (as well as their respective system services). We also bake in a custom rpicam-apps (the library responsible for driving camera feeds into the app), which was modified to be more performant in our use case (specifically, we modified it to add a secondary UNIX domain socket channel to send raw images simultaneously with the H.264 stream, so that we wouldn&#x27;t need to decode them separately). Additionally, there&#x27;s ONNX Runtime, which I mention below.<p>In the image itself, we&#x27;ve added two partitions: a data and provisioning partition. The data partition is designed to separate the mutable data (the state files for our camera binary) against the rest of the root filesystem. The provision partition is used by the deploy tool to inject a random camera_secret in as the pre-shared key (PSK) used to initiate pairing in OpenMLS (for our E2EE).<p>We have a lot of future work in store for this Secluso OS! A few things I&#x27;m working on right now are a read-only root filesystem (through squashfs), hardening the kernel, and getting rid of a massive dependency we currently rely on (ONNX Runtime) for machine learning. We&#x27;ve been working with burn, a popular Rust machine learning library, to optimize their &quot;burn-flex&quot; crate to match the performance of ONNX Runtime for the model we use for object detection. After that&#x27;s done, half of the dependencies used by the OS will be able to be removed! (as ONNX Runtime drags in things such as python).<p>Please let me know if you have any questions!
  • ultrarunner6 hours ago
    This looks like a great project at first glance. One thing I did not see answered was how storage is handled. Is there a way to view historical video (even an hour ago)?
    • arrdalan5 hours ago
      The videos are stored in the mobile app and you can view them when you need. The camera captures videos when it detects an event, e.g., a person, encrypts them, and sends them to the mobile app. The app decrypts them and stores them locally, allowing the user to view them when needed. The app also allows for livestreaming and it keeps the livestreamed video locally as well.
  • wmf9 hours ago
    What&#x27;s the difference between the hub and the server?
    • arrdalan9 hours ago
      The camera_hub runs in the camera. It records videos, encrypts them, and sends them to the mobile app. The server is a relay in the cloud. It transfers encrypted videos from the camera to the mobile app.
  • privacyfish6 hours ago
    [flagged]