Entity: aes_prng_masking

Diagram

int unsigned Width int unsigned ChunkSize int unsigned EntropyWidth bit SecAllowForcingMasks bit SecSkipPRNGReseeding int unsigned NumChunks masking_lfsr_seed_t RndCnstLfsrSeed mskg_chunk_lfsr_perm_t RndCnstChunkLfsrPerm clk_i rst_ni force_zero_masks_i data_update_i reseed_req_i entropy_ack_i [EntropyWidth-1:0] entropy_i [Width-1:0] data_o reseed_ack_o entropy_req_o

Description

Copyright lowRISC contributors. Licensed under the Apache License, Version 2.0, see LICENSE for details. SPDX-License-Identifier: Apache-2.0

AES high-bandwidth pseudo-random number generator for masking

This module uses multiple parallel LFSRs connected to PRINCE S-Boxes and PRESENT permutations to generate pseudo-random data for masking the AES cipher core. The LFSRs can be reseeded using an external interface. ///////////////////////////////////////////////////////////////////////////////////////////////// IMPORTANT NOTE: // DO NOT USE THIS BLINDLY! // // It has not yet been verified that this initial implementation produces pseudo-random numbers // of sufficient quality in terms of uniformity and independence, and that it is indeed suitable // for masking purposes. // /////////////////////////////////////////////////////////////////////////////////////////////////

Generics

Generic name Type Value Description
Width int unsigned WidthPRDMasking Must be divisble by ChunkSize and 8
ChunkSize int unsigned ChunkSizePRDMasking Width of the LFSR primitives
EntropyWidth int unsigned edn_pkg::ENDPOINT_BUS_WIDTH
SecAllowForcingMasks bit 0 Allow forcing masks to 0 using
SecSkipPRNGReseeding bit 0 The current SCA setup doesn't provide
NumChunks int unsigned Width/ChunkSize derived parameter
RndCnstLfsrSeed masking_lfsr_seed_t RndCnstMaskingLfsrSeedDefault
RndCnstChunkLfsrPerm mskg_chunk_lfsr_perm_t RndCnstMskgChunkLfsrPermDefault

Ports

Port name Direction Type Description
clk_i input
rst_ni input
force_zero_masks_i input
data_update_i input Connections to AES internals, PRNG consumers
data_o output [Width-1:0]
reseed_req_i input
reseed_ack_o output
entropy_req_o output Connections to outer world, LFSR reseeding
entropy_ack_i input
entropy_i input [EntropyWidth-1:0]

Signals

Name Type Description
seed_en logic
seed_valid logic
seed logic [Width-1:0]
prng_seed logic [NumChunks-1:0][ChunkSize-1:0]
prng_en logic
prng_state logic [NumChunks-1:0][ChunkSize-1:0]
sub logic [NumChunks-1:0][ChunkSize-1:0]
prng_b logic [NumBytes-1:0][7:0]
sub_b logic [NumBytes-1:0][7:0]
phase_q logic

Constants

Name Type Value Description
NumChunks int unsigned Width/ChunkSize derived parameter
NumBytes int unsigned Width/8

Processes

Type: always_ff

Instantiations

Description
Upsizing of entropy input to correct width for PRNG reseeding.