Yes, In the Ethereum blockchain, difficulty and the dynamically adjusted target are related (the difficulty is used to calculate a target). Basically to keep the Ethereum network functioning as expected its needed to maintain the average block-time (approximately 14s).
Since the number of nodes is kept changing and the strategy to find a valid hash is enumerating the possibilities in which the time to find it is totally a random, the average block- time is controlled by the Ethash algorithm by making it hard to generate a block if the last blocks have been found in shorter time than usual and making it easy if it was found in lesser time.
The process of making the block generation hard or easy is done by dynamically adjusting a target where the hash of the next block should be less than that target. That target is also expressed in terms of the difficulty at that block generation time.
As per the Ethash algorithm explained in the Github Ethereum wiki here,
Mining
The mining algorithm is defined as follows:
def mine(full_size, dataset, header, difficulty):
target = zpad(encode_int(2**256 // difficulty), 64)[::-1]
from random import randint
nonce = randint(0, 2**64)
while hashimoto_full(full_size, dataset, header, nonce) > target:
nonce = (nonce + 1) % 2**64
return nonce
Dynamically adjusted Target is calculated according to the difficulty at the moment and in mining it keeps finding a nonce while a hash less than the target is generated.
To have at least N zero bits as the leftmost bits (= its value is under 2^N where N is a natual number). However, it seems Ethereum is different. I found a mathematical term about it:n ≤ 2^256 / H_d, but I couldn't find any restriction for the possible value of theH_dthanH_d∈ℙ(according to the Yellow Paper). Also the Ethereum White Paper states that it uses double-SHA256 hashes. – Константин Ван Sep 14 '17 at 02:11