Here's a try using point density for the fog effect.
There are two cubes in the image, I just beveled them slightly, the outer cube's material is basically a glass setup, except that I used an image texture to affect the roughness, and add some variation to the surface structure.
Some explanation on the light path and math>maximum nodes, in the ice material setup:
The light path node determines what type of ray is currently being traced, and by using the Math>Maximum node, outputs
0 if it is not the specified ray connected to the math node, and
1 if it is for the corresponding socket of the mix shader. (
0= top socket,
1= bottom socket of the mix shader). If either shadow, or reflection rays are traced in this case, then the maximum node outputs
1, and the material uses the transparent shader. For all other rays, it returns
0, and uses the glass shader. Using this setup provides more transparent shadows, which is desirable here as we have a second object inside the first.
Here is the node setup for the 'outer cube':
The second cube, which is the inside the first has a particle system attached to it. The particles are set up basically at the default settings. I only increased the count to 2200, and set the end to 15. Experiment here, and have fun with it. Here is the final distribution of the particles on the rendered frame from my example below:
The point density material, is added to the 'inner cube' object. The setup is as follows:
The additional Math>Add nodes after the Multiply are optional, but give more control over the material. I used them to adjust the brightness and density of the particles individually, rather than using the Multiply node alone, as that affects both together.
Also, if you really want to avoid using an emission shader, just use the volume scatter, but I personally found the emission shader to have a nicer look.
Here is the result, it's not perfection but perhaps it will give you some ideas to experiment with.