As a preface, what I am asking is highly related to this question. That said, the question linked was asked in 2011 (7 years ago), and I imagine the microcontroller world has changed (at least to some degree) since that time.
I want to include sensitive info as part of a program on some sort of uC - AVR, ARM, whatever. I want to protect this data against people who obtain physical access to the device (if I lose it, or if it's stolen). I want to be able to easily reprogram/re-flash this device. I am assuming I have a perfect (but not otherwise useful) method of authenticating myself to the device that an attacker wouldn't have - so it knows it's me, but I can't use this authentication to, say, generate an encryption key or anything like that. How can I protect my code?
Additional information: I know there are fuses to prevent hex dumps, and may just have to use those depending on the answers to this question. I know they can be defeated by de-lidding and laser-probing the uC, but they'll keep your average hobbyist out. Unfortunately, those also make reflashing more difficult, requiring an external programmer (which is undesirable). I'm OK with having to add some additionally circuitry/components to the device, I really just need to see what's possible (and what's changed since 2011).
I have been asked for more clarity regarding my specific problem, so I'll add it in here. I'll note that I originally decided against it because (1) I don't want to bottleneck answers into a specific vein of thought, and (2) I figured I would get more "don't do this"-type answers that useful ones. With that said:
I'm working on a hardware password manager. I know, there are a bunch of these out right now. This one would read a fingerprint, and type a corresponding password (acting as a USB keyboard). If the source code on the uC is secure, then I feel (given my potential attack vectors) this will be secure enough for my own personal use - will I recommend it to a government agency? Obviously not. The uC uses a special key to communicate with the fingerprint scanner, and the fingerprint scanner can respond with a digital representation of the fingerprint that could be used to decrypt a password stored on the uC.
The main problem: If physical access to the device is obtained, an attacker could obtain the special key from the uC, get the fingerprint (stored on the scanner for comparison), and decrypt the password stored on the uC again. If the uC (or the hex from the uC) is not readable, an attacker cannot as easily obtain this information. Thus: how do I keep the information secure, while still being able to easily-enough reprogram the uC?