Data integrity in IoT system
The source for all this is called cryptography, and it's a very mature field. Nothing about this is any special for IoT devices: you need to sign your data with a key that only is accessible to the individual IoT device, but has a matching key that your receiving end has access to. Typically, you  can't (or don't want to) keep both keys secret, so this is a private-public keypair.
One way to store such keys are indeed specifically designed crypto ICs, but often, communications-oriented microcontrollers themselves have the capability to store cryptographic keys in a manner that's &quot;secure&quot; against being read out. How secure you need to be is down to threat modelling.
Which hashing/signing algorithms are appropriate for your problem depends on your data payload (makes no sense to use a cipher that's secure for Gigabytes of payload but can't work on small blocks if you need to transmit 2 Bytes), your threat modelling, your integrity needs, and the computation your devices can stem.
Many things that are called &quot;IoT system&quot; are really just fully-fledged application processors running general-purpose operating systems (e.g. Linux, VxWorks,…). For these, a huge field of existing implementations for this exist: from IPsec over TLS to BSD signify (or even PGP signatures, but I recommend not using these), everything is available for them, and if you can trust your devices to not be physically tampered with, you just store the keys in normal permanent memory (in flash). If you can't trust that, signing can be off-loaded to dedicated cryptographic hardware, from USB tokens (yubikey, nitrokey, etc) to I²C chips to even trusted platform modules (TPM), which these devices often even come with.