I would therefore like to calculate the hessian for each convolution kernel, which is significantly less complex.

While this is mathematically less complex, the way that convolution layers are implemented in every framework is that the compute the full forward (or backward-grad / backward-weight) as an optimized function. There isn’t the ability to ask to only compute backward-weight wrt kernel 34 (for example).
So if you get y = kernel[34] and ask for grad wrt y, what will likely happen is that it’ll compute the full grad, and then zero out everything else and give you slice corresponding to y