Creative Commons images are CC BY-NC-SA 3.0


added to your
shopping cart

In stock 56 in stock
2.95 1+ units
2.66 10+ units
2.36 100+ units

Description: In secure embedded systems, you often need to authenticate messages or connected devices but many microcontrollers aren't set up for the necessary cryptography. That's where the Atmel ATSHA204 comes in.

The Atmel ATSHA204 is an optimized authentication chip that includes a 4.5Kb EEPROM. This array can be used for storage of keys, miscellaneous read/write, read-only, password or secret data, and consumption tracking. Access to the various sections of memory can be restricted in a variety of ways and then the configuration locked to prevent changes.

Each ATSHA204 ships with a guaranteed unique 72-bit serial number. Using the cryptographic protocols supported by the chip, a host system or remote server can prove that the serial number is both authentic and not a copy. The ATSHA204 can generate high-quality random numbers and employ them for any purpose, including usage as part of the crypto protocols of this chip.

This breakout board allows you to use the small SOT-23 package in your prototypes!


  • Supply Voltage: 2.0-5.5V
  • Integrated capability for both host and client operations
  • Superior SHA-256 hash algorithm, HMAC option
  • Best-in-class, 256-bit key length; storage for up to 16 keys
  • Guaranteed unique 72-bit serial number
  • Internal, high-quality Random Number Generator (RNG)
  • 4.5-Kbit EEPROM for keys and data
  • 512 OTP (One Time Programmable) bits for fixed information
  • Sleep Current: <150nA


Comments 26 comments

  • Is there a chance you might be making a breakout board for the I2C-enabled 8-pin SOIC, TSSOP, or UDFN versions of this chip?

    • I actually just made one for this reason. It just went out to the fab house so I should have it all assembled in a few weeks. Contact me if you’re intersted. Specifically the SOIC8 chip in this case.

  • cool, the chip looks like a simple transistor, obfuscation made easier

  • The example library does not work with the Arduino Due. I tried modifying it (essentially hard coding writing to the specific PIO control registers) but nothing functioned (error codes E7-timeout and E4-buffer size error). Does anyone know of code that runs on the Due? I’m trying to set up a challenge-response security system, so one alternative is to use a simpler chip than the ASH204. Thank you in advance for some help.

  • Having a but of trouble getting a random number out of this :/ I know I’m doing something wrong I want to plug one of these into my server and make java random numbers a but more random :)

  • Datasheet link is broken. Here is the new one:

    • Thanks for pointing that out to us (and finding the new file path). I have let our catalog department know, so this should be updated soon.

  • I still cannot think of a sample project for this. Can someone enlighten me?

    • Using the HMAC and unique id you can authenticate messages sent over non secure channels. This is useful when you dont have HTTPS support and you need to unsure you know the sender e.g. sensors or security devices.

      You can probably also use it to authenticate devices for paid or exclusive services. Think of the device like a usb dongle…

      The random number generator can be useful for a number of things…

  • so how would one talk to one of these with an arduino?

    • If it’s one wire you could grap a small PICAXE to convert it from one wire to serial. It’ll be pretty simple to code.

      • Not really any easier - the PICAXE would still need to be programmed to handle the complex timing.

        • PICAXE has a onewire interface command (readowsn I think)… So it’s pretty easy…

          • True, however Arduino has an entire I2C library. So I get the impression that it’s more complicated.

            • I’m missing something…. How did we end up talking about I2C? And tbf, PICAXE has extensive commands for that too. :P

              I’ll admit that if there is a library for the onewire interface in Arduino, then it’s probably the easiest way. But if there wasn’t (or if another microchip wanted to use it) then a PICAXE could be used easily as a bridge between the 2 systems. Even as an educational tool, the PICAXE is a cheap and powerfull tool.

    • This version of the chip only allows for a one-wire interface. Which is sweet, because it needs only one pin, but also requires some pretty precise timing.

      I’m working on an Arduino library. A bit bare-bones now, but it’s got all the bit-banged communication stuff sorted out. It’s based on Atmel’s very spiffy template library.

      • According to Atmel ATSHA204 datasheet: There are 88 bytes in the configuration zone which contain manufacturing identification data, general device and system configuration, and access restriction control values for the slots within the data zone. Byte 14 (I2C_Enable) uses “bit 0” to tell you whether chip is set as either I2C or as single-wire. If bit 0 set as 0 then operates in single-wire interface mode, or set as 1 then operates in I2C interface mode).

        I checked the Arduino library and it has defined “ADDRESS_I2CEN” for this purpose, but it appears this is not used anywhere in the code… but then the writer does say “it is a bit bare-bones now”.

        So if you really wanted to be safe may be worth testing which protocol is being used in your code, as datasheet does say “Communications with the ATSHA204 achieved through one of two different protocols, and selected using the part number that is ordered”.

      • Are you talking about OneWire from Dallas Semiconductor?

  • So… I could use this as a much simpler way, to do what I’ve already done. (made my airsoft guns all have a circuit inside them that only allows them to fire while a certain resistance (within a tolerance) connection is added to the circuit (by 2 contacts on the handle or stock, and a resistor sewn into my gloves) so noone can steal my stuff. Hmm making it fancy and slightly more advanced sounds like fun now.

  • Interesting. On another note, a lot of these small boards don’t have any mounting holes at all. Just one hole would probably be enough for this.

    • I can’t think of any reason you’d need to mount this board by itself. I think it’s designed to be incorporated into a larger project, perhaps using protoboard.

Related Products