We're happy to announce that we've had good progress on the design of the 3D printable BusKill USB-A magnetic breakaway couplers this year!
While we do what we can to allow at-risk folks to purchase BusKill cables anonymously, there is always the risk of interdiction.
We don’t consider hologram stickers or tamper-evident tape/crisps/glitter to be sufficient solutions to supply-chain security. Rather, the solution to these attacks is to build open-source, disassembleable, and easily inspectable hardware whose integrity can be validated without damaging the device and without sophisticated technology.
Actually, the best way to confirm the integrity of your hardware is to build it yourself. Fortunately, printing your own circuit boards, microcontroller, or silicon has a steeper learning curve than a BusKill cable -- which is essentially just a USB extension cable with a magnetic breakaway in the middle.
Mitigating interdiction via 3D printing is one of many reasons that Melanie Allen has been diligently working on prototyping a 3D-printable BusKill cable this year. In this article, we hope to showcase her progress and provide you some OpenSCAD and
.stl files so you can experiment with building your own and help test and improve our designs.
ⓘ Note: This post is adapted from its original article on Melanie Allen's blog.
Developing the Prototype
A few years ago, Michael asked me if I was interested in developing a 3D-printed case for the magnetic breakaway. He enumerated the following design requirements:
- The case should be as small as possible, because it shouldn’t block neighboring ports, nor sit heavy in the port causing it to bump into objects on the desk.
- The case should be able to be dissembled, so that people can make sure it isn’t tampered with. It shouldn’t be glued together.
- In order to avoid using glue, we had a factory specially manufacture some hexagonal shaped magnets that we believed would be able to sit inside the printed part without glue.
- Much like USB breakaways that are designed to prevent wear and tear on ports, the case would house a pogo pins and magnets, and a USB.
However, over the past years' iterations, we adjusted the requirements:
- We learned that we didn’t have to put the magnetic release near the port, but that it is better to put it near the person.
- We realized that these parts are so small (and magnetic), and the magnets so strong, that assembly requires glue. The case itself doen't require glue, but the pogo pins and magnets must be glued in place.
- Because we are now ok with having to use glue, it is probably better to use easy to find disc magnets rather than the special hexagonal ones.
- The case doesn’t actually need to house the USB, only the pogo receptors, pogo pins, wires, magnets, and cord.
This process taught me about the realities of going from idea to execution.
My Journey with OpenSCAD
When I started this project, I was novice-beginner level with OpenSCAD. I had designed something of similar complexity about 8 years ago. It was a model of an assembly related to creating a timelapse camera for Raspberry PI. I discovered that I had a lot to learn about actually writing good, parametric OpenSCAD code... Even though I commented my BusKill OpenSCAD code thoroughly, it was a mess! It was hard to use myself, let alone sharing with the open source community...
I had to rewrite it all... sometimes you have to break things to fix them. You have to go backwards to go forwards.
And so, chipping away whenever I could -- whether it was few minutes or a few hours -- I am now working on the PROOF OF CONCEPT / 1st Prototype.
And that's what I'm here to share with you today. However, it's still very much a work-in-progress (more on this below).
The current prototype design of the 3D printable magnetic breakaway coupler consists of two sides, each of which consist of a top, middle, and bottom. In the OpenSCAD code, the side that would stay with the laptop is called the "release" and the side that would stay with the person is called the "breakaway".
Wire stripper, soldering iron with fine tip, helping hands, xacto knife, painters tape, multimeter, alligator clips
3D printed case (6 pieces), 8 magnets, 4 pogo pins, 4 pogo receptors, solder, wire, usb-to-usb-port cord, usb, carabiner, E360 glue
Note: If you can’t acquire a usb-to-usb-port cord, it’s possible to make your own as long as you have a spare usb-to-usb cord and a spare charger that you don’t mind dissembling for this purpose. However, it’s important to make sure that the cord is a data cord, and not a charging cord only. You’ll know because data cords have 4 wires whereas charging-only cords have two wires.
Print the Case
- This prototype uses magnetic_release_B_v0.9.stl. Download from the Github Repository: https://github.com/BusKill/usb-a-magnetic-breakaway
- I have a Flashforge Creator Pro and use the Flashforge slicer. I print Hyper Quality and using a raft. Takes about 45 minutes.
ⓘ Note: If you'd prefer to buy a BusKill cable than make your own, you can buy one fully assembled here.
Assemble the cable
Cut near the port. Splice the wires. Note: cut somewhat close to where the USB attaches to the cord, but not so close that you don't have room for error.
Glue magnets to the middle piece:
- Arrange magnets in place Optional: mark the tops and bottoms of the magnet with permanent marker
- Apply glue to the middle piece
- Slide in the middle piece for one side.
- Slide in the middle piece for the other side.
- Use a thin but firm material to carefully separate the pieces and allow glue to set.
Tip: I put down a little blue painter’s tape on my workspace where I want to put my pieces down to dry. Also, there’s very little room for plastic-out-of-place and 3D printers don’t always print perfectly. If your magnets aren’t sitting securely, there may be a bit of plastic blocking the way that you need to trim out.
- Solder USB wires to pogo pins
- Solder USB wires to pogo receptors
Note: There is a slight asymmetry in the design, you’ll notice a thicker side and a thinner side. This can help you identify if the "top" and "bottom" pieces are oriented correctly.
Tip: I find the original USB wires so tiny and unwieldy that it's difficult to solder them to the even pogos... so I spliced them into breadboard wire first.
- Consult pinout diagram to arrange wires correctly.
- Use marker to label wire channels in the printed piece.
Glue wires carefully to the top and bottom parts of the case.
The spring part of the pogo pins when pressed should be flushed with the edge of the case, but when not pressed should poke out.
When the glue is dry, sandwich the middle piece between the top and bottom pieces and wrap securely with electrical tape.
NOTE: In the image below the wires are not actually glued yet. I was just sort of mocking it up.
Where We Are Now
Before I glued the wires in, I wanted to make sure everything was working and wired correctly.
So I dissembled and attached each wire to itself with alligator clips to test whether my computer would detect it. It failed.
It seemed to me that if this didn’t work then if I proceeded onward it was likely not going to work. I’m a little perplexed. I tried continuity testing, but I'm not sure if my multimeter is faulty..
So I started over again with splicing the cables ... even though I was confident in my soldering work. Yet even without any wires spliced-in ... the wire connected to itself with the alligator clips still isn’t functional. So what is the problem here?
If you have access to a 3D Printer, you have basic EE experience, or you'd like to help us test our 3D printable BusKill prototype, please let us know. The whole is greater than the sum of its parts, and we're eager to finish-off this 3D printable BusKill prototype to help make this security-critical tool accessible to more people world-wide!
If you'd like to purchase a BusKill cable, click here.