Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.arch.embedded > #31806
| From | Don Y <blockedofcourse@foo.invalid> |
|---|---|
| Newsgroups | comp.arch.embedded |
| Subject | Re: Embedding a Checksum in an Image File |
| Date | 2023-04-21 04:39 -0700 |
| Organization | A noiseless patient Spider |
| Message-ID | <u1tsm3$13ook$1@dont-email.me> (permalink) |
| References | (1 earlier) <pvl24i57aef4vc7bbdk9mvj7sic9dsh64t@4ax.com> <f0afa198-e735-4da1-a16a-82764af3de4dn@googlegroups.com> <36534il81ipvnhog6980r9ln9tdqn5cbh6@4ax.com> <u1t7eb$10gmu$3@dont-email.me> <u1tpcr$1377f$1@dont-email.me> |
On 4/21/2023 3:43 AM, David Brown wrote: >> Note that you want to choose a polynomial that doesn't >> give you a "win" result for "obviously" corrupt data. >> E.g., if data is all zeros or all 0xFF (as these sorts of >> conditions can happen with hardware failures) you probably >> wouldn't want a "success" indication! > > No, that is pointless for something like a code image. It just adds needless > complexity to your CRC algorithm. Perhaps you've forgotten that you don't just use CRCs (secure hashes, etc.) on "code images"? > You should already have checks that would eliminate an all-zero image or other > "obviously corrupt" data. You'll be checking the image for a key or "magic > number" that identifies the image as "program image for board X, project Y". > You'll be checking version numbers. You'll be reading the length of the image > so you know the range for your CRC function, and where to find the appended CRC > check. You might not have all of these in a given system, but you'll have some > kind of check which would fail on an all-zero image. See above. >> You can also "salt" the calculation so that the residual >> is deliberately nonzero. So, for example, "success" is >> indicated by a residual of 0x474E. :> > > Again, pointless. > > Salt is important for security-related hashes (like password hashes), not for > integrity checks. You've missed the point. The correct "sum" can be anything. Why is "0" more special than any other value? As the value is typically meaningless to anything other than the code that verifies it, you couldn't look at an image (or the output of the verifier) and gain anything from seeing that obscure value. OTOH, if the CRC yields something familiar -- or useful -- then it can tell you something about the image. E.g., salt the algorithm with the product code, version number, your initials, 0xDEADBEEF, etc. >>> So now you have a new extended block |....data....|crc| >>> >>> Now if you compute a new CRC on the extended block, the resulting >>> value /should/ come out to zero. If it doesn't, either your data or >>> the original CRC value appended to it has been changed/corrupted. >> >> As there is usually a lack of originality in the algorithms >> chosen, you have to consider if you are also hoping to use >> this to safeguard the *integrity* of your image (i.e., >> against intentional modification). > > "Integrity" has nothing to do with the motivation for change. /Security/ is > concerned with intentional modifications that deliberately attempt to defeat > /integrity/ checks. Integrity is about detecting any changes. > > If you are concerned about the possibility of intentional malicious changes, Changes don't have to be malicious. I altered the test procedure for a piece of military gear we were building simply to skip some lengthy tests that I *knew* would pass (I don't want to inject an extra 20 minutes of wait time just to get through a lengthy test I already know works before I can get to the test of interest to me, now. I failed to undo the change before the official signoff on the device. The only evidence of this was the fact that I had also patched the startup message to say "Go for coffee..." -- which remained on the screen for the duration of the lengthy (even with the long test elided) procedure... ..which alerted folks to the fact that this *probably* wasn't the original image. (The computer running the test suite on the DUT had no problem accepting my patched binary) > CRC's alone are useless. All the attacker needs to do after modifying the > image is calculate the CRC themselves, and replace the original checksum with > their own. That assumes the "alterer" knows how to replace the checksum, how it is computed, where it is embedded in the image, etc. I modified the Compaq portable mentioned without ever knowing where the checksum was store or *if* it was explicitly stored. I had no desire to disassemble the BIOS ROMs (though could obviously do so as there was no "proprietary hardware" limiting access to their contents and the instruction set of the processor is well known!). Instead, I did this by *guessing* how they would implement such a check in a bit of kit from that era (ERPOMs aren't easily modified by malware so it wasn't likely that they would go to great lengths to "protect" the image). And, if my guess had been incorrect, I could always reinstall the original EPROMs -- nothing lost, nothing gained. Had much experience with folks counterfeiting your products and making "simple" changes to the binaries? Like changing the copyright notice or splash screen? Then, bringing the (accused) counterfeit of YOUR product into a courtroom and revealing the *hidden* checksum that the counterfeiter wasn't aware of? "Gee, why does YOUR (alleged) device have *my* name in it -- in addition to behaving exactly like mine??" [I guess obscurity has its place!] Use a non-secret approach and you invite folks to alter it, as well. > Using non-standard algorithms for security is a simple way to get things > completely wrong. "Security by obscurity" is very rarely the right answer. In > reality, good security algorithms, and good implementations, are difficult and > specialised tasks, best left to people who know what they are doing. > > To make something secure, you have to ensure that the check algorithms depend > on a key that you know, but that the attacker does not have. That's the basis > of digital signatures (though you use a secure hash algorithm rather than a > simple CRC). If you can remove the check, then what value the key's secrecy? By your criteria, the adversary KNOWS how you are implementing your security so he knows exactly what to remove to bypass your checks and allow his altered image to operate in its place. Ever notice how manufacturers don't PUBLICLY disclose their security hooks (without an NDA)? If "security by obscurity" was not important, they would publish these details INVITING challenges (instead of trying to limit the knowledge to people with whom they've officially contracted). [If it was so good and they were trying to rely on trade secret, why not just PATENT their approach, also disclosing it in the process? Surely, the details will "leak" from one of the NDA signers long before patent protection would expire... And, presumably, these are "people who know what they are doing"...] Sign all the binaries and all I have to do is remove the *test* for those signatures and the images can be as corrupted as I choose. You need to "secure" the test if you want the image to be securable. This is why it is so hard to use "open" security protocols on hardware devices (cuz there are almost always ways to subvert the verification process/hardware). Having physical access to a device usually means it can be compromised -- if worth your effort. [The trick is to make the effort great enough to be on a par with just copying the *functionality*, from scratch, and not bothering trying to alter the executable in a way that is not detectable] [[There are companies who's business models are exactly that -- cloning other products (e.g., from folks like big blue) at the functional level -- yet steering clear of any copyright issues.]]
Back to comp.arch.embedded | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Embedding a Checksum in an Image File Rick C <gnuarm.deletethisbit@gmail.com> - 2023-04-19 19:06 -0700
Re: Embedding a Checksum in an Image File Niklas Holsti <niklas.holsti@tidorum.invalid> - 2023-04-20 12:14 +0300
Re: Embedding a Checksum in an Image File Rick C <gnuarm.deletethisbit@gmail.com> - 2023-04-20 06:18 -0700
Re: Embedding a Checksum in an Image File "Peter Heitzer" <peter.heitzer@rz.uni-regensburg.de> - 2023-04-20 11:30 +0000
Re: Embedding a Checksum in an Image File dalai lamah <antonio12358@hotmail.com> - 2023-04-20 13:47 +0200
Re: Embedding a Checksum in an Image File Rick C <gnuarm.deletethisbit@gmail.com> - 2023-04-20 06:04 -0700
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-20 16:46 +0200
Re: Embedding a Checksum in an Image File George Neuner <gneuner2@comcast.net> - 2023-04-20 11:33 -0400
Re: Embedding a Checksum in an Image File Rick C <gnuarm.deletethisbit@gmail.com> - 2023-04-20 09:45 -0700
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-20 22:26 +0200
Re: Embedding a Checksum in an Image File Ulf Samuelsson <ulf.r.samuelsson@gmail.com> - 2023-04-27 18:36 +0200
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-28 09:12 +0200
Re: Embedding a Checksum in an Image File Ulf Samuelsson <ulf.r.samuelsson@gmail.com> - 2023-04-28 10:35 +0200
Re: Embedding a Checksum in an Image File George Neuner <gneuner2@comcast.net> - 2023-04-20 16:44 -0400
Re: Embedding a Checksum in an Image File Don Y <blockedofcourse@foo.invalid> - 2023-04-20 22:37 -0700
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-21 12:43 +0200
Re: Embedding a Checksum in an Image File Don Y <blockedofcourse@foo.invalid> - 2023-04-21 04:39 -0700
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-21 16:50 +0200
Re: Embedding a Checksum in an Image File Don Y <blockedofcourse@foo.invalid> - 2023-04-21 17:29 -0700
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-22 16:57 +0200
Re: Embedding a Checksum in an Image File Don Y <blockedofcourse@foo.invalid> - 2023-04-24 00:32 -0700
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-24 16:37 +0200
Re: Embedding a Checksum in an Image File Don Y <blockedofcourse@foo.invalid> - 2023-05-03 00:15 -0700
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-05-03 14:48 +0200
Re: Embedding a Checksum in an Image File Ulf Samuelsson <ulf.r.samuelsson@gmail.com> - 2023-05-09 20:42 +0200
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-05-10 10:06 +0200
Re: Embedding a Checksum in an Image File Ulf Samuelsson <ulf.r.samuelsson@gmail.com> - 2023-05-10 12:03 +0200
Re: Embedding a Checksum in an Image File Don Y <blockedofcourse@foo.invalid> - 2023-08-05 01:48 -0700
Re: Embedding a Checksum in an Image File Don Y <blockedofcourse@foo.invalid> - 2023-08-05 01:42 -0700
Re: Embedding a Checksum in an Image File Stefan Reuther <stefan.news@arcor.de> - 2023-04-21 19:40 +0200
Re: Embedding a Checksum in an Image File Tauno Voipio <tauno.voipio@notused.fi.invalid> - 2023-04-20 20:17 +0300
Re: Embedding a Checksum in an Image File George Neuner <gneuner2@comcast.net> - 2023-04-20 16:49 -0400
Re: Embedding a Checksum in an Image File Richard Damon <Richard@Damon-Family.org> - 2023-04-20 22:09 -0400
Re: Embedding a Checksum in an Image File Rick C <gnuarm.deletethisbit@gmail.com> - 2023-04-20 19:41 -0700
Re: Embedding a Checksum in an Image File Richard Damon <Richard@Damon-Family.org> - 2023-04-21 19:30 -0400
Re: Embedding a Checksum in an Image File Brian Cockburn <brian.cockburn.1959@gmail.com> - 2023-04-21 01:53 -0700
Re: Embedding a Checksum in an Image File Rick C <gnuarm.deletethisbit@gmail.com> - 2023-04-21 05:12 -0700
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-21 17:02 +0200
Re: Embedding a Checksum in an Image File Brian Cockburn <brian.cockburn.1959@gmail.com> - 2023-04-21 16:56 -0700
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-22 17:01 +0200
Re: Embedding a Checksum in an Image File Rick C <gnuarm.deletethisbit@gmail.com> - 2023-04-21 20:14 -0700
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-22 17:13 +0200
Re: Embedding a Checksum in an Image File Rick C <gnuarm.deletethisbit@gmail.com> - 2023-04-22 09:56 -0700
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-22 19:54 +0200
Re: Embedding a Checksum in an Image File Grant Edwards <invalid@invalid.invalid> - 2023-04-22 20:05 +0000
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-23 17:37 +0200
Re: Embedding a Checksum in an Image File Grant Edwards <invalid@invalid.invalid> - 2023-04-23 17:37 +0000
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-23 23:45 +0200
Re: Embedding a Checksum in an Image File Richard Damon <Richard@Damon-Family.org> - 2023-04-23 18:16 -0400
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-24 09:13 +0200
Re: Embedding a Checksum in an Image File boB <boB@K7IQ.com> - 2023-04-22 13:41 -0700
Re: Embedding a Checksum in an Image File Rick C <gnuarm.deletethisbit@gmail.com> - 2023-04-23 10:34 -0700
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-23 23:58 +0200
Re: Embedding a Checksum in an Image File Rick C <gnuarm.deletethisbit@gmail.com> - 2023-04-23 15:24 -0700
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-24 09:17 +0200
Re: Embedding a Checksum in an Image File Rick C <gnuarm.deletethisbit@gmail.com> - 2023-04-24 01:07 -0700
Re: Embedding a Checksum in an Image File Ulf Samuelsson <ulf.r.samuelsson@gmail.com> - 2023-04-27 18:42 +0200
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-28 09:20 +0200
Re: Embedding a Checksum in an Image File Ulf Samuelsson <ulf.r.samuelsson@gmail.com> - 2023-04-28 10:44 +0200
Re: Embedding a Checksum in an Image File Brian Cockburn <brian.cockburn.1959@gmail.com> - 2023-04-21 16:52 -0700
Re: Embedding a Checksum in an Image File Rick C <gnuarm.deletethisbit@gmail.com> - 2023-04-21 20:23 -0700
Re: Embedding a Checksum in an Image File Brian Cockburn <brian.cockburn.1959@gmail.com> - 2023-04-22 07:07 -0700
Re: Embedding a Checksum in an Image File Richard Damon <Richard@Damon-Family.org> - 2023-04-22 10:31 -0400
Re: Embedding a Checksum in an Image File Rick C <gnuarm.deletethisbit@gmail.com> - 2023-04-22 09:54 -0700
Re: Embedding a Checksum in an Image File Ulf Samuelsson <ulf.r.samuelsson@gmail.com> - 2023-04-27 18:26 +0200
Re: Embedding a Checksum in an Image File Rick C <gnuarm.deletethisbit@gmail.com> - 2023-04-27 10:09 -0700
Re: Embedding a Checksum in an Image File Niklas Holsti <niklas.holsti@tidorum.invalid> - 2023-04-27 21:29 +0300
Re: Embedding a Checksum in an Image File Niklas Holsti <niklas.holsti@tidorum.invalid> - 2023-04-27 21:39 +0300
Re: Embedding a Checksum in an Image File Ulf Samuelsson <ulf.r.samuelsson@gmail.com> - 2023-04-27 22:44 +0200
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-28 09:38 +0200
Re: Embedding a Checksum in an Image File Ulf Samuelsson <ulf.r.samuelsson@gmail.com> - 2023-04-28 10:50 +0200
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-28 15:04 +0200
Re: Embedding a Checksum in an Image File Ulf Samuelsson <ulf.r.samuelsson@gmail.com> - 2023-04-29 23:03 +0200
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-30 16:19 +0200
Re: Embedding a Checksum in an Image File Ulf Samuelsson <ulf.r.samuelsson@gmail.com> - 2023-05-09 20:34 +0200
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-05-10 10:18 +0200
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-28 09:33 +0200
Re: Embedding a Checksum in an Image File Ulf Samuelsson <ulf.r.samuelsson@gmail.com> - 2023-04-27 22:36 +0200
Re: Embedding a Checksum in an Image File Niklas Holsti <niklas.holsti@tidorum.invalid> - 2023-04-28 01:10 +0300
Re: Embedding a Checksum in an Image File Ulf Samuelsson <ulf.r.samuelsson@gmail.com> - 2023-04-28 10:54 +0200
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-28 09:24 +0200
Re: Embedding a Checksum in an Image File Ulf Samuelsson <ulf.r.samuelsson@gmail.com> - 2023-04-28 10:56 +0200
Re: Embedding a Checksum in an Image File David Brown <david.brown@hesbynett.no> - 2023-04-28 15:09 +0200
Re: Embedding a Checksum in an Image File Ulf Samuelsson <ulf.r.samuelsson@gmail.com> - 2023-04-29 23:02 +0200
Re: Embedding a Checksum in an Image File Ulf Samuelsson <ulf.r.samuelsson@gmail.com> - 2023-04-27 18:27 +0200
csiph-web