0

So, we've got a ROS application running on a robot, which is going to be distributed to potential partners/customers. The code on the robot's computer will be compiled, but we want to add extra layers of security so that people wouldn't have as easy a time getting inside (to read/decompile/reverse-enginner it) and to the compiled binaries and we are looking at encryption as a potential way to do that.

The main computer on the robot is an Nvidia Jetson, so it's basically running a slightly modified ubuntu on it, and the communication to it will be done through a web-app via websocket.

Options we have considered:

  • encrypting the compiled binary files of the app
  • encrypting a partition on the robot's computer where the app would live
  • encrypting the whole disk

In the first case, the binaries would have to be decrypted before being run, which we think kind of defeats the pupose?

In the second and third cases - is there a point to either of them? Can we run the app from within the partition/disk without having to undo the encryption first? And if we cannot, doesn't that still open it up to basically the same vulnerabilities apart from being accessed by someone who's just pulled the hard disk off the computer?

Is just going with something like setting user groups and restricting permissions and access in that way a viable alternative option?

p.s.: any tips on securing the webserver and websocket connections for the web-application would also be appreciated

3
  • 6
    You're trying to implement DRM and it won't work.
    – MechMK1
    Mar 31 at 13:06
  • 6
    No, computers can't run code if they can't see the code they are running.
    – user253751
    Mar 31 at 13:43
  • 1
    Does the Jetson have a TPM+SecureBoot or something similar? You might be able to do disk encryption and store the key in there. Obviously you'd need to lock down any serial/graphical/USB connections to it.
    – user
    Mar 31 at 14:41

1 Answer 1

1

Against a nation state, there is no hope. Against the average customer, there's some.

Encryption at rest and access control systems which prevent a customer from logging into the machine is good enough in most cases. If the customer cannot dump the executable from the hard drive and cannot log in to dump the contents of memory programmatically, this is mitigation enough for many applications. The barrier for attack is raised past many casual users.

Will this prevent the customer from probing DDR and seeing your program? No. But an organization has to define how secure is secure enough. On a different platform, maybe there are more options (TrustZone, hardware disk decryption, cores which run encrypted programs, science fiction) but on the jetson this is all that is available.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.