diff --git a/blocks/blockstore/blockstore.go b/blocks/blockstore/blockstore.go
index ed24326c9fb5aa49680947412571ed237e024406..e4a9f7745e5e19db95a8a55897c7b6f5331a3d04 100644
--- a/blocks/blockstore/blockstore.go
+++ b/blocks/blockstore/blockstore.go
@@ -133,6 +133,13 @@ func (bs *blockstore) AllKeysChan(ctx context.Context, offset int, limit int) (<
 			// need to convert to u.Key using u.KeyFromDsKey.
 			k = u.KeyFromDsKey(ds.NewKey(e.Key))
 			log.Debug("blockstore: query got key", k)
+
+			// key must be a multihash. else ignore it.
+			_, err := mh.Cast([]byte(k))
+			if err != nil {
+				return "", true
+			}
+
 			return k, true
 		}
 	}
@@ -149,6 +156,9 @@ func (bs *blockstore) AllKeysChan(ctx context.Context, offset int, limit int) (<
 			if !ok {
 				return
 			}
+			if k == "" {
+				continue
+			}
 
 			select {
 			case <-ctx.Done():